ビュー(XAML)のコントロールにアタッチする依存関係プロパティを使用してビヘイビアクラスを作成しました。私はMVVMを使用しているので、ViewModelのプロパティにバインドしてこの添付プロパティを設定する必要がありますが、設定されません。ここで私は何をしたいの簡易版である:UWPでのバインドで添付のビヘイビアプロパティが設定されていません
行動クラス:
public static class TestBehavior
{
public static readonly DependencyProperty SomeStringProperty =
DependencyProperty.Register("SomeString", typeof(string), typeof(TestBehavior), new PropertyMetadata(""));
public static string GetSomeString(DependencyObject o)
{
return (string)o.GetValue(SomeStringProperty);
}
public static void SetSomeString(DependencyObject o, string value)
{
o.SetValue(SomeStringProperty, value);
}
}
XAML:
<TextBlock Text="{Binding ViewModelProperty}" local:TestBehavior.SomeString="{Binding ViewModelProperty}" />
のTextBlockの "テキスト" プロパティは、正しくバインドビヘイビアの "SomeString"プロパティはそうではありません。
興味深いことに、ビヘイビアプロパティを値に設定すると、そのプロパティが設定されます。例:
<TextBlock Text="{Binding TestValue}" local:TestBehavior.SomeString="Foo" /> <!-- This Works -->
動作プロパティへのバインディングが機能しない理由はありますか?
これはまさに私が(ブレークポイントを使って)したことです。私はコールバックメソッドを追加し、それはバインディングで実行されます。バインディングを使用してGet/Setメソッドが実行されない理由は何ですか? –
これは、バインディングインフラストラクチャが依存プロパティ(通常または添付)を使用して動作する方法です。私はそれが内部最適化の何らかの形だと信じています。 – ibebbs
また、 'GetSomeString'メソッドはコードがプロパティにアクセスしやすくするための一般的なパターンにすぎないとも思います。プラットフォームは、バインドするときに値を設定するだけです。 –