11

WPFでは、次のようにUpdateSourceTriggerを利用することで、ユーザーがデータに変更を加えるたびに、基になるデータモデルを更新できます。

<TextBox Text="{Binding Path=TextProperty, UpdateSourceTrigger=PropertyChanged}"/>

Window Phoneでは、UpdateSourceTriggerはXAML仕様に含まれていませんでした。これを実現するには、次のようなTextChangedハンドラーが必要でした。

(sender as TextBox).GetBindingExpression(TextBox.TextProperty).UpdateSource();

Windows 8では、UpdateSourceTriggerも省略されると思いました-私は正しかったです。しかし、GetBindingExpression()も欠落していることを知って驚いた。

Windows 8で、UpdateSourceTriggerを使用したWPFおよびGetBindingExpression()。UpdateSource()を使用したWindows Phoneで達成した最善の手法は何ですか?

注意:この質問はWindows 8(Metro)開発用です。この他の質問(Windows Phone7TextBoxに相当する"UpdateSourceTrigger= PropertyChanged")は、WindowsPhone開発用です。混同しないでください。

調査の問題として、この例(私が作成したもの)は、TextBoxオーバーライドを使用して、更新を引き起こす2つのプロパティ間でテキスト値を交換します。これに基づいています。しかし、もっと良い方法はありますか?何かエレガント?

4

3 に答える 3

5

回避策はないGetBindingExpressionか、同等の回避策はないようです。ただし、次のようにTextBoxを拡張できます:https ://mytoolkit.svn.codeplex.com/svn/WinRT/Controls/ExtendedTextBox.cs

それでもこれは問題自体を解決しません...(それは本当に悲しいです)

参照:

于 2012-10-05T16:22:20.477 に答える
1

Windows8.1で利用できるUpdateSourceTriggerようです。GetBindingExpression上記のRicoSuterとこの質問からのHDWProductionに感謝します。

Windows Store TextBox-Enterキーアップでバインディングを更新する方法は?

于 2014-04-29T14:16:51.880 に答える
-2

ジェリー、

使用する必要のあるパターンは、INotifyPropertyChangedを実装することです。こちらとMSDNの例:http://msdn.microsoft.com/en-us/library/ms229614.aspx

このように、バッキングプロパティまたはフィールドにバインドされているXAMLオブジェクトは、NotifyPropertyChanged()メソッドの呼び出しにより、バッキングフィールドの値が変更されたときに通知されます。

このパターンを実装する場合、UIをいつ更新するかを明示的に定義する必要はありません。通知可能なプロパティにバインドされているすべてのUI要素は、ソースが変更されたときに更新することを期待しているとおりになります。

INotifyPropertyChangedを実装するクラスの場合

スニペットを使用して、このようなプロパティのほとんどを作成します(バインドされる可能性がある場合、または別のオブジェクトに通知する必要がある場合):

private PropertyChangedEventArgs myVarChangedEventArgs = new PropertyChangedEventArgs("MyProperty");
private int myVar;
public int MyProperty
{
get { return myVar; }
set
  {
     if (myVar != value)
     {
        myVar = value;
        NotifyPropertyChanged(myVarChangedEventArgs);
      }
   }
}
于 2012-10-04T18:11:45.433 に答える