簡體   English   中英

將值從綁定的ViewModel傳遞到UserControl

[英]Passing value from bound ViewModel to UserControl

我試圖創建一個條件文本框用戶控件,在該控件上將有一個接受屬性

  • 條件(true | false,Binding)
  • FalseValue(true | false,綁定,StaticResource)
  • TrueValue(true | false,Binding,StaticResource)

問題是我的StaticResource和文字值工作正常,除了綁定。

<Grid Background="#FFBDBDBD" Margin="0,154,0,266">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="33*"></RowDefinition>
        <RowDefinition Height="33*"></RowDefinition>
        <RowDefinition Height="33*"></RowDefinition>
    </Grid.RowDefinitions>
    <userControls:ConditionalTextBox 
        Grid.Column="0"
        Grid.Row="0"
        Condition="{Binding Path=IsTrue, Mode=TwoWay}"
        FalseValue="{StaticResource FalseValRes}" 
        TrueValue="{StaticResource TrueValRes}" 
        HorizontalAlignment="Left" Width="500">
    </userControls:ConditionalTextBox>

    <userControls:ConditionalTextBox 
        Grid.Column="0"
        Grid.Row="1"
        Condition="True"
        FalseValue="{Binding FalseValueDefined}" 
        TrueValue="{Binding TrueValueDefined}" 
        HorizontalAlignment="Left" Width="500">
    </userControls:ConditionalTextBox>

    <userControls:ConditionalTextBox 
        Grid.Column="0"
        Grid.Row="2"
        Condition="False"
        FalseValue="False Value (string)" 
        TrueValue="True Value (string)" 
        HorizontalAlignment="Left" Width="500">
    </userControls:ConditionalTextBox>
</Grid>

后面有代碼

public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            this.DataContext = new VMTest
            {
                IsTrue = true,
                FalseValueDefined = "False Value (Binding)",
                TrueValueDefined = "True Value (Binding)"
            };
        }
    }

和這個虛擬機

public class VMTest : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;


        private bool isTrue;
        public bool IsTrue
        {
            get { return isTrue; }
            set
            {
                isTrue = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("IsTrue"));
            }
        }

        private string trueValueDefined;
        public string TrueValueDefined
        {
            get { return trueValueDefined; }
            set
            {
                trueValueDefined = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("TrueValueDefined"));
            }
        }

        public string falseValueDefined;
        public string FalseValueDefined
        {
            get { return falseValueDefined; }
            set
            {
                falseValueDefined = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("FalseValueDefined"));
            }
        }
    }

結果,StaticResource和文字值成功到達UserControl,也許我錯過了它不會影響的綁定

結果

在此輸入圖像描述

任何幫助,將不勝感激。

TIA

我將從查看datacontext分辨率開始。 您是否嘗試過確保數據上下文正確:

<userControls:ConditionalTextBox 
    x:Name="boundControl"
    Grid.Column="0"
    Grid.Row="1"
    Condition="True"
    FalseValue="{Binding FalseValueDefined}" 
    TrueValue="{Binding TrueValueDefined}" 
    HorizontalAlignment="Left" Width="500">
</userControls:ConditionalTextBox>

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();

        this.boundControl.DataContext = new VMTest
        {
            IsTrue = true,
            FalseValueDefined = "False Value (Binding)",
            TrueValueDefined = "True Value (Binding)"
        };
    }
}

檢查綁定跟蹤信息可能也有幫助。 嘗試

 "{Binding FalseValueDefined, PresentationTraceSources.TraceLevel=High}"

如果運行程序並查看Visual Studio調試輸出,您將獲得一些調試行,這些行描述了WPF解決綁定的嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM