在运行时

时间:2017-07-03 13:15:25

标签: wpf combobox

在我看来,我有一个Combobox和一个TextBlock。 TextBlock通过FormLoad上名为“MyViewModel”的ViewModel在XAML中的Text属性上设置的DataBinding来接收值。

Combobox有一个ItemSource和一个SelectedItem,它们被绑定到同一个ViewModel中的属性,即“MyViewModel”

现在,当我从视图中更改Combobox的选择时,我希望在TextBlock中设置Combobox的SelectedItem对象的成员。

我怎么能这样做?即有什么方法可以根据我在运行时的情况以某种方式将TextBlock的Text的DataBinding属性从“MyViewModel”更改/切换到不同的源/属性? 或者如何最好地解决这个问题?

public class AllTexts
{
   public int ID {get;set;}
   public string Text1{get;set;}
   public string Text2{get;set;}
}

public class MyViewModel:INotifyPropertyChanged//Assume the interface has been implemented.
{
   private string p_Text1;
   private AllTexts p_SelectedRec;
   public string Text1
   {
    get{return p_Text1;}
   }
   set
   {  if(p_Text1!=value)
    {
        p_Text1=value;
        RaisePropertyChanged("Text1");
    }
   }
   public List<AllTexts> ALT;

   public AllTexts SelectedRec
      {
        get{return p_SelectedRec;}
      }
      set
      {  if(p_SelectedRec!=value)
        {
            p_SelectedRec=value;
            RaisePropertyChanged("SelectedRec");
        }
   }

   public MyViewModel()
   {
      ALT=new List<AllTexts>();//Assume this List gets populated
   }
}

MainWindow.Xaml(查看)

<ComboBox x:Name="cmbSelectText" ItemsSource="{Binding ALT}" DisplayMemberPath="Id" SelectedValuePath="Id" SelectedItem="{Binding SelectedRec}"  SelectedValue="{Binding SelectedRec.Id,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

<TextBlock x:Name="txtTextSpecimen"  Text="{Binding Text1,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

如何在运行时更改/切换Combox的SelectedItem的名为“Text2”的属性与ViewModel的名为“Text1”的属性之间的绑定?

2 个答案:

答案 0 :(得分:0)

TextBlock属性的source属性的setter中设置SelectedRec的source属性,例如:

public AllTexts SelectedRec
{
    get { return p_SelectedRec; }
    set
    {
        if (p_SelectedRec != value)
        {
            p_SelectedRec = value;
            RaisePropertyChanged("SelectedRec");
            if (p_SelectedRec != null)
                Text1 = p_SelectedRec.SomeStringPropertyOfTheAllTextsClass;
        }
    }
}

另请注意,您应该绑定到 SelectedItem的{​​{1}}或SelectedValue属性:

ComboBox

答案 1 :(得分:0)

XAML:

    <ComboBox SelectedItem="{Binding SelectedText}" HorizontalAlignment="Left" Margin="50,65,0,0" VerticalAlignment="Top" Width="120" />
    <TextBlock Text="{Binding SelectedText}" HorizontalAlignment="Left" Margin="56,108,0,0" TextWrapping="Wrap" VerticalAlignment="Top"/>

C#:

    private string _SelectedText;

    public string SelectedText
    {
        get { return _SelectedText; }
        set { _SelectedText = value; OnPropertyChanged("SelectedText"); }
    }

    public MainWindow()
    {
        InitializeComponent();
    }