2017-05-18 5 views
-1

WPFデータバインディングを学習しています。次のようなシナリオがあります。 これは(CurrentRecはVM1ののObservableCollection <>コレクションから、現在選択されているレコードである)これが正常に動作します私のForm1.xaml.csWPFで動作しないコントロールのXamlまたはCodebehindのいずれかのコントロールに2番目のデータバインド

ViewModel1 VM1; 
ViewModel2 VM2; 
Public Form1() 
{ 
    InitializeComponent(); 
    VM1 = new ViewModel1(); 
    VM2 = new ViewModel2; 
    this.DataContext=VM1; 
} 

Form1.Xaml です:

<TextBox x:Name="txtTest1" IsEnabled="{Binding CurrentRec.SearchFound}" Text="{Binding CurrentRec.Description1}"/> 

これではありませんこの2番目のTextboxは、2番目のViewModelのプロパティ(VM2のObservableCollection <>コレクションから現在選択されているレコード)のVM2にバインドされています。

<TextBox x:Name="txtTest2" DataContext={Binding VM2} IsEnabled="{Binding CurrentRec.SearchFound}" Text="{Binding CurrentRec.Description2}"/> 

私もこれを試してみました:

<TextBox x:Name="txtTest2" DataContext={Binding VM2.CurrentRec} IsEnabled="{Binding SearchFound}" Text="{Binding Description2}"/> 

あまりにもfar.Plzヘルプので、私のために働いていないこと。

+0

2つのこと:バウンドフィールドは、パブリックプロパティ、get/setアクセサーメソッド、およびバインディングは常に現在のDataContextからプルする必要があります。ですから、 'this.DataContext = this'と言うと、VM1とVM2の両方のプロパティにバインドできます。私は通常、DataContextを説明するために、WPFの初心者に[このSO答え](http://stackoverflow.com/a/7262322/302677)を送って、それを読むことをお勧めします:) – Rachel

答えて

0
DataContext="{Binding VM2}" 

これは、VM2がDataContext(ViewModel1)のプロパティである場合にのみ機能します。 WPFは、コントロールのDataContextでのみバインドされたプロパティを探します。

VM2がForm1のプロパティである場合は、次のことを試すことができます:

<TextBox x:Name="txtTest2" DataContext="{Binding VM2, RelativeSource={RelativeSource AncestorType={x:Type local:Form1}}}" IsEnabled="{Binding CurrentRec.SearchFound}" Text="{Binding CurrentRec.Description2}"/ 

しかし、これが最善のアプローチではありません。最良の方法は、各ビューに対して単一のDataContext(ViewModel)を作成することです。

+0

ありがとうYevgeniy、それは働いた...私はそれが別のスレッドで尋ねられるかもしれませんが、plzはこのRelatibveSourceの事にいくつかの軽い光を投げて、なぜ私はVM1がプロパティであって、通常のオブジェクト...事前に感謝.. :-)。 –

+0

DataContext = "{Binding VM2}"のようなものを使用すると、バインディングはコントロールDataContextのプロパティを探しています。しかし、他のソースを指定することもできます(ElementName、RelativeSource ....)RelativeSourceを使用すると、コントロールの祖先をビジュアルツリーから指定できます。ビジュアルツリーは、コントロールのツリー構造です。この記事を見て、より詳しい情報を入手してください。http://www.c-sharpcorner.com/UploadFile/yougerthen/relativesources-in-wpf/ – Yevgeniy

+0

「プロパティであり、通常のオブジェクトではない」とはどういう意味ですか? – Yevgeniy

関連する問題