0

これが可能かどうかはわかりませんが、タイトルの質問を説明するコードは次のとおりです。

public class LogicClass : INotifyPropertyChanged
{
    private String _myText;
    public String MyText
    {
        get{return _myText;}
        set
        {
            _myText = value; 
            PropertyChanged(this, new PropertyChangedEventArgs("MyText"));
        }
    }
    ...
}

public partial class Window1: Window, INotifyPropertyChanged
{
    private LogicClass _logic;
    public String LogicText
    {
        get{return _logic.MyText;}
    }
    ...
}

<ContentControl Name="contentControl1" >
    <Binding ElementName="MainWindow" Path="LogicText"/>
</ContentControl>

私のLogicClass変数を公開し、その実装を利用することなく、これを機能させる方法はありますかINotifyPropertyChanged. これがバブルアップする可能性があるかどうか、またはUIコードビハインドに冗長性を持たせる必要があること以外のことを知りたいと思いますset(これが私が今これを行っている方法です)

4

2 に答える 2

2

はい、_logic から PropertyChanged イベントを処理してから、LogicText で同等の PropertyChanged 通知を発生させるか、MyText に標準イベントを追加する必要があるため、MyTextChanged イベントを作成してこれを処理し、LogicText の PropertyChanged を発生させる必要があります。 .

したがって、LogicClass が Xaml に直接バインドされていない場合、LogicClass に INotifyPropertyChanged を実装する必要はなく、次のようにします。

public class LogicClass
{
    private String _myText;

    public event EventHandler MyTextChanged;

    public String MyText
    {
        get{return _myText;}
        set
        {
            _myText = value; 
            var handler = MyTextChanged;
            if(handler != null){ MyTextChanged(this, EventArgs.Empty); }
        }
    }
    ...
}

public partial class Window1: Window, INotifyPropertyChanged
{
    private LogicClass _logic;

    public Window1()
    {
       _logic = ... initialised;
       _logic.MyTextChanged += (s,e) => RaisePropertyChanged("LogicText");
    }


    public String LogicText
    {
        get{return _logic.MyText;}
    }
    ...
}
于 2012-04-09T19:59:53.523 に答える
1

あなたが求めているのが、本質的に「このプロパティは別のクラスの別のプロパティを表しているので、それが変化するかどうかを確認する必要がある」と宣言的に言えるかどうかということであれば、それは不可能です。ただし、この動作を自分で模倣することはできます。PropertyChangedロジッククラスのイベントにアタッチするだけで、プロパティが変更されたら、を呼び出しMyTextてウィンドウのイベントを発生させます。PropertyChangedOnPropertyChanged

ViewModelこれは、ウィンドウの背後にあるコード内の何かではなく、あなたの中に入る何かにほぼ確実に適していることに注意してください。

于 2012-04-09T20:02:07.247 に答える