1
 <TextBox Name="CustomerName" Height="30" Margin="5"
  Text="{Binding Source={StaticResource MyCustomerData},
   Path=CustomerName, Mode=TwoWay}" Grid.Row="0" Grid.Column="1" />

上記は私のxamlスニペットです

MuCustomerData は INotifyPropertyChanged インターフェイスを実装する私のクラスであり、ビュー (UI) への PropertyChanged イベントを使用して変更について通知するプロパティ CustomerName があります。

ここでは、クラス (MyCustomerData) を StaticResource としてバインドし、バインディング モードを TwoWay としてバインドします。これは実際に双方向で機能しますか?または、クラスを動的リソースとして使用して、バインディングを双方向に機能させる必要がありますか? StaticResource がロードされるのは一度だけなので、それが staticresource の場合、それ以上の変更は行われません....あなたの考えは?? 私はちょうどこれを読んだhttp://www.codeproject.com/Articles/393086/WPF-StaticResource-vs-DynamicResource ..Plsはこの記事を見てください..

4

2 に答える 2

4

StaticResourceDynamicResourceバインディングではなく、WPF のリソースを参照してください。

StaticResource一度評価され (通常は XAML が解析されるとき)、WPF はリソースが静的であり、決して変更されないと想定するため、再度評価されることはありません。

DynamicResourceリソースが動的であることを意味するため、値が必要なときはいつでも評価してください。

あなたの場合、Sourceバインディングのプロパティは一度評価され、に設定されているため二度と評価されませんStaticResourceMyCustomerDataオブジェクトを新しいオブジェクトに変更した場合、バインディングはそれ自体を再評価して変更を反映することはありません。

しかし、実際のプロパティはバインディングCustomerNameを使用してバインドされているため、必要に応じて更新されますTwoWay

別の見方をすると、次のようなバインディングを作成しています。

var b = new Binding();
b.Source = MyCustomerData;
b.Path = "Name";
b.Mode = TwoWay;

b.Sourceを使用して設定する場合はStaticResource、 を使用してバインディングを評価することを考えてb.Source.Nameください。しかし、a を使用する場合はDynamicResource、それを で評価するものと考えて ください。MyCustomerData.Nameそのため、現在のバージョンの が使用されMyCustomerDataます。

したがってMyCustomerData、バインドが一度評価された後に = new MyCustomerData();` を設定すると、動的リソースはそれを正しく評価しますが、静的リソースは正しく評価しません。

于 2013-11-04T19:38:55.930 に答える