2009-07-16 16 views

答えて

18

いいえ、あなたはC#の代入演算子のオーバーロードのようなことはできません。あなたができることは、変数をプロパティに変更し、メソッドを呼び出したり、セッターでイベントを委譲したりすることです。

private string field; 
public string Field { 
    get { return field; } 
    set { 
     if (field != value) { 
      field = value; 
      Notify(); 
     } 
    } 
} 

これは、プロパティの変更を追跡するために(WPF DependencyPropertyシステムのような)多くのフレームワークによって行われます。

+0

ありがとうMehrdad。 – Rohit

+0

これを行うための優れた共通の手法は、 'INotifyPropertyChanged'インタフェースです。 –

1

これを行う方法はありません。変数は、基本的に、アプリケーションが書き込むメモリ内の場所です。

代わりにプロパティを使用します。

string myVariable; 
public string MyVariable 
{ 
    get 
    { 
     return myVariable; 
    } 
    set 
    { 
     myVariable = value; 
     MyVariableHasBeenChanged(); 
    } 
} 

private void MyVariableHasBeenChanged() 
{ 

} 
+0

ちょっと調べてみると、変更した後で "MyVariableHasBeenChanged"を呼び出す方が良いでしょう。そうすれば、メソッドで何かを行うことができ、代入に例外がスローされた場合に対処できます。 –

+0

明らかに優れています(そしておそらく唯一有用な方法です)。ありがとう。 – weiqure

0

をあなたのどちらかが(変数である)モデル内のGUIへの参照を持っており、直接setterメソッドでGUIの変更を行うか、あなたはあなたのGUIを観察します観察者を介してあなたのモデルを観察し、観測者に観察可能なモデルの発火イベントを設定させる。前者は最終的にスパゲッティコードにつながります。これは、モデルとビューの間にますます直接的なリンクを追加するため、社内のツールや簡単なプログラムにのみ使用する必要があります。

3

Observer pattern。ここにanother referenceがあります。

+0

この問題の解決策としてのオブザーバーパターンのために、否定的な投票を正当化できますか? –

+0

あなたは正しいですし、ダウン投票者は頭をぶら下げるべきです。最も単純な形式では、オブザーバが正しいパターンです。これはWPFが使用するものなので、WPFの '何が変わったのか'を伝える必要があります。私はあなたに救済を+1するでしょう。 –

+0

Downvoteそれはリンク専用の回答だから、私は疑う。 – Blorgbeard

2

また、データバインディングin WPFWindows Formsに使用することもできます。これにより、オブジェクトのプロパティーに応じてGUIの状態を変更することができます、逆の場合はです。

関連する問題