2017-07-03 64 views
0

在我看来,我有一个Combobox和一个TextBlock。 TextBlock通过在FormLoad上从名为“MyViewModel”的ViewModel在XAML中的文本属性上设置的DataBinding接收值。更改/切换WPF文本框的文本dataBinding在运行时

组合框具有的ItemSource和的SelectedItem,这是有界的,以性能在同一个视图模型,即“MyViewModel”

现在,当我从视图改变ComboBox的选择,我想的组合框的一员SelectedItem的对象将在TextBlock中设置。

我如何做到这一点?即有办法,我可以改变/切换TextBlock的文本的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的属性命名为“文本2”和视图模型的财产在运行时命名为“文本1”之间的绑定?

回答

0

设置为TextBlock源属性在SelectedRec财产的来源,setter方法,如:

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或的的SelectedValue财产ComboBox

<ComboBox x:Name="cmbSelectText" ItemsSource="{Binding ALT}" DisplayMemberPath="Id" SelectedItem="{Binding SelectedRec}" /> 
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(); 
    }