2017-07-03 10 views
0

私の見解では、私はコンボボックスとTextBlockを持っています。 TextBlockは、FormLoadの "MyViewModel"という名前のViewModelから、XAMLのTextプロパティに設定されたDataBindingを介して値を受け取ります。WPFテキストボックスのテキストデータの変更/実行時のバインド

コンボボックスには、私はビューからのコンボボックスの選択を変更すると、私はコンボボックスのメンバーが欲しいすなわち「MyViewModel」今

、ViewModelに同じでプロパティにバインドされItemSourceとのSelectedItemを、持っていますTextBlockに設定される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}"/> 

どのように私は、これは "テキスト2" という名前COMBOXののSelectedItemのプロパティと、実行時に "テキスト1" という名前のViewModelのプロパティとの間の結合を切り替える/変更できますか?

答えて

0

SelectedRec財産のソースプロパティのセッターでTextBlock、例えばソースプロパティを設定します。

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(); 
    } 
関連する問題