0

このクラスがあると想像してください:

Class Foo
{
    public Bar b1 { get; set; }
    public Bar b2 { get; set; }
    public Bar b3 { get; set; }

    public void UpdateBarsMyProp(bool value)
    {
        // ????
    }
}

Class Bar
{
    public bool MyProp { get; set; }

    public bool UpdateMyProp(bool value)
    {
        this.MyProp = value;
    }
}

b1、b2、およびb3でプロパティMyPropを更新する最良の方法は何ですか?

ジェネリック?

代議員?

編集:

私の特定の状況に関する詳細情報を追加するだけです:

仮想キーボードを作成していて、WPF MVVM を使用しているので、次のようにします。

いくつかのキー ViewModel を含む KeyBoard ViewModel です。ビュー (xaml ファイル) で各キー情報を特定の ViewModel にバインドする必要があるため、それらをリストに格納できません。

ここで、ユーザーが仮想シフト ボタンを押したときに、すべての Key ViewModel の表示文字を更新するために、Keyboard ViewModel オブジェクトが必要です。

4

4 に答える 4

2

プロパティをList<Bar>(または必要に応じて配列に) 入れて、それを反復処理することができます。

そう:

public Bar b1 { get; set; }
public Bar b2 { get; set; }
public Bar b3 { get; set; }
// other Bar props...

private List<Bar> barsList = new List<Bar>(){ b1, b2, b3, ... };

public void UpdateBarsMyProp(bool value)
{
    foreach(Bar bar in barsList)
    {
        bar.MyProp = value;
    }
}
于 2012-08-31T10:13:07.270 に答える
0

すべてのバー オブジェクトが同じ MyProp を必要とする場合、MyProp を静的に設定できます。

public static bool MyProp { get; set; }

次に、すべてのバー オブジェクトのすべての MyProps を次のように編集できます。

Bar.MyProp = baz;

すべての Bar オブジェクトが同じ MyProp を共有している場合にのみ、これを使用します

于 2012-08-31T10:11:14.420 に答える
0

このようなものが欲しいかもしれません。

class Foo
{
    private readonly IList<Bar> bars = new List<Bar>
        {
            new Bar(),
            new Bar(),
            new Bar()
        }

    public Bar this[int i]
    {
        get
        {
           return this.bars[i];
        }
    }

    public void UpdateBars(bool value)
    {
        foreach (var bar in this.bars)
        {
            bar.MyProp = value;
        }
    }
}

次に、このように最初のバーにアクセスできます

var foo = new Foo();
var firstBar = foo[0];

少しコンバーターを使用してインデクサーにバインドできます。これにより、モデルの脆弱性が軽減されます。


インデクサーを使用したくない場合は、セッターを に上げることができますFoo

Class Foo
{
    public Bar b1 { get; set; }
    public Bar b2 { get; set; }
    public Bar b3 { get; set; }

    public bool MyProp
    {
        set
        {
            if (this.b1 != null)
            {
                this.b1.MyProp = value;
            }

            if (this.b2 != null)
            {
                this.b2.MyProp = value;
            }

            if (this.b3 != null)
            {
                this.b3.MyProp = value;
            }
        }
    }
}
于 2012-08-31T10:19:24.863 に答える
0

たぶんあなたの例は単純化されていますが、なぜそうしないのですか

b1.MyProp = b2.MyProp = b3.MyProp = value;

また、なぜUpdateMyPropメソッドを気にするのですか?これは、プロパティ セッター メソッドと同じです。セッターにさらにロジックを追加する必要がある場合は、変更することで自動実装プロパティの使用を停止できます

public bool MyProp { get; set; }

private bool myProp;

public bool MyProp
{
   get { return this.myProp; }
   set
   {
      // any logic here
      this.myProp = value;
   }
}
于 2012-08-31T10:08:12.213 に答える