2017-07-03 66 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(); 
    }