0

このように定義されたデータ トリガーがあります。

 <DataTrigger Binding="{Binding Path=DataContext.MyObject.MyProperty, Mode=OneWay, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="False">
    <Setter Property="IsEnabled" Value="False" />
 </DataTrigger>

MyObject はビュー モデルにあります。現在、MyObject の MyProperty が変更された場合、MyProperty が OnPropertyChange に通知しても、UI に通知しません。Microsoft Prism をフレームワークとして使用しているため、オブジェクト MyObject はコンテナに登録されます。

これを機能させるにはどうすればよいですか?

EDIT : MyObject は次のように定義されています。

public class MyObject : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

    private bool _myProperty;
    public bool MyProperty
    {
        get { return _myProperty; }
        set
        {
            if (value == _myProperty)
                return;

            _myProperty = value;
            OnPropertyChanged("MyProperty");
        }
    }
}
4

3 に答える 3

0

RelativeSource明示的でなくても動作しますFindAncestorか? 変更してみる

RelativeSource={RelativeSource AncestorType=UserControl}}"

に:

RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"

于 2013-03-23T06:04:12.263 に答える
0

DataContextがのインスタンスに設定されている場合-MyObject必要なDataContext.MyPropertyのは、データコンテキストに実際に呼び出されたプロパティMyObjectがあり、これがのインスタンスでもある場合を除きますMyObject

DataContext.MyProperty(DataContext は既に MyObject のインスタンスです)

DataContext.MyObject.MyProperty(あなたの datacontext オブジェクト (ビューモデル) には、MyObject 型の MyObject というプロパティが本当にありますか?)

例 :

<DataTrigger Binding="{Binding Path=DataContext.MyProperty, Mode=OneWay, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="False">
    <Setter Property="IsEnabled" Value="False" />
 </DataTrigger>

私が間違っている場合は、コードを投稿できますViewModelか-つまり、DataContextとして設定されているもの

于 2013-03-26T14:56:49.047 に答える
0

あなたが投稿したコードに「間違った」ものは何もありません。プロパティ値を変更していて、必要な呼び出しを適切に行っていると確信していますDispatcherか?

代わりにこの構造を試すことができますか? (勝手な推測です。あなたの文脈に合うかどうかはわかりません)

[編集: ここではメモリから行っているため、構文を微調整する必要があります]

<Trigger Property="{Binding Path=DataContext.MyObject.MyProperty, Mode=OneWay, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="False">
    <Setter Property="IsEnabled" Value="False" />
</Trigger>
于 2013-03-23T04:03:29.927 に答える