3

MVVMパターンとWPFバインディングを使用したコーディングの例では、単一値の場合はINotifyPropertyChanged、値の場合はObservableCollectionを使用します。INotifyPropertyChangedと単一の値のObservableCollection

また、INotifyPropertyChangedで静的変数を使用することはできませんが、ObservableCollectionで行うことができます。私は静的変数にバインドしたいと思います。

最も簡単な解決策は、ObservableCollectionを使用し、常にインデックス0を使用してバインドすることです。これは適切ですか? ObservableCollectionの代わりにINotifyPropertyChangedを使用すると便利ですか?例えば

private static int _myValue; 
public static int MyValue //does not work 
{ 
    get { return _myValue; } 
    set { _myValue = value; OnPropertyChange(); } 
} 

<TextBox Text="{Binding MyValue, UpdateSourceTrigger=PropertyChanged}"> 
+0

"これは適切ですか?"それが動作すれば、それは動作します。あなたがパフォーマンスの問題に遭遇していない限り、私はそれが問題ないと思います。あなたが言ったように、INotifyPropertyChangedで静的プロパティを使用することはできません。 ObservableCollection上でINPCを使用する利点についてはわかりませんが、これは通常、さまざまな方法で使用されるためですが、この場合は静的プロパティでINPCを使用できません。 – Zack

+0

また、この質問の受け入れられた答えに興味がある可能性がありますhttp://stackoverflow.com/questions/14614190/inotifypropertychanged-and-static-properties – Zack

+0

静的なプロパティ( 'public static event EventHandler StaticPropertyChanged'、blah blah)しかし、私はそれを試しました、それは動作しませんでした、あなたのハックは多くの問題が少ないように見え、実際に動作します。ありがとう! –

答えて

1

私はあなたのアナロジーは(Primitive Typeプロパティで直接にObservableCollectionの比較)公正ではないと思います。さて、以下の両方が同じように動作するクラス以下

public class MyClass : INotifyPropertyChanged 
{ 

    private string text; 

    public string Text 
    { 
     get { return text; } 
     set { text = value; 
     RaiseChange("Text"); 
     } 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 
    private void RaiseChange(string prop) 
    { 
     if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); } 
    } 
} 

ObservableCollectionの比較:

public static MyClass Text { get; set; } 

public static ObservableCollection<string> Text { get; set; } 

あなたはObservableCollectionためMyClassまたはText[0] = "Hello"ためText.Text = "Hello"を実行する場合は、両方が同じように反映されます。今、あなたは私があなたの新しいクラスに書くためにあなたをアドバイスしますObservableCollectionするのではなく、その後の結合のための静的プロパティを使用する必要がある場合

原因ObservableCollectionは、おそらくいずれにも役に立たない 多くの内部実装を持っています実際にメモリを消費しています& perforamnce。

0

これはlinkは役立つかもしれない、それはリスト、のObservableCollectionとの違いを示しています。これをやりたいと思っため

public static ObservableCollection<int> MyValues { get; set; } 

<TextBox Text="{Binding MyValue[0]}"> 

: これは、最も簡単な回避策のようですINotifyPropertyChanged。

・ホープ、このヘルプ

関連する問題