2012-04-09 8 views
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コードビハインドで冗長性を持たなくてはならないことを知りたいと思います。(これは今私がやっている方法です)

答えて

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;} 
    } 
    ... 
} 
+0

ありがとう、なぜ私はそれについて考えなかったのかわかりません。 :-p –

1

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

これは、あなたのViewModelに入るものにほぼ適していることに注意してください。ウィンドウ上のコードビハインドのものではありません。

関連する問題