0

私は、他の埋め込み WPF グリッドを含む WPF グリッドを持つ MVVM アプリケーションを持っています。同時に、それぞれにいくつかのフィールド (WPF TextBlocks) が含まれています。

非常に単純化された例 - 表示:

<Grid>

   <Grid>
       // Row definitions
       // Colum definitions
       <TextBlock Grid.Row="3" Grid.Column="0"
                  Text="{Binding Path=SomeField1}" /> 
   <Grid>

   <Grid>
       // Row definitions
       // Colum definitions
       <TextBlock Grid.Row="0" Grid.Column="1"
                  Text="{Binding Path=SomeField2}" /> 
   <Grid>

</Grid>

これらの各 TextBlocks は、ビュー モデルで定義された文字列プロパティにバインドされます。

ビュー モデル (INotifyPropertyChanged を実装) :

private string _someField1;
public string SomeField1
{
   get return _someField1;
   set 
   {
       if (_someField1 == value) return;
       _someField1 = value;
       OnPropertyChanged("SomeField1");
   }
}

private string _someField2;
public string SomeField2
{
   get return _someField2;
   set 
   {
       if (_someField2 == value) return;
       _someField2 = value;
       OnPropertyChanged("SomeField2");
   }
}

次に、モデル、つまり、デバイスからデータが取得されると、1 つのプロセスによって埋められるいくつかのパブリック プロパティを持つクラスがあります。このクラスには、ビュー モデルで定義されているものとまったく同じプロパティが含まれています。

モデル:

public class MyModel
{
    private string _someField1;
    public string SomeField1
    {
       get return _someField1;
       set 
       {
           if (_someField1 == value) return;
           _someField1 = value;
       }
    }

    private string _someField2;
    public string SomeField2
    {
       get return _someField2;
       set 
       {
           if (_someField2 == value) return;
           _someField2 = value;
       }
    }
}

後でビュー モデルからこのクラス (モデル) からデータを抽出し、それらのプロパティの値をビュー モデル内の対応するプロパティに割り当てます。最後に、ビューはこれらのプロパティにバインドされているため、ビューは次の例のように値で正しく更新されます。

受信したデータを抽出するビュー モデル メソッド:

private void DataReceived(MyModel data)
{
    this.SomeField1= data.SomeField1;
    this.SomeField2= data.SomeField2;
}

問題は、ビュー モデルとモデルの 2 倍のプロパティを定義する必要があることです。したがって、これを回避したいので、テキストブロックをモデルのプロパティに直接バインドし、ビューモデルでプロパティを定義しないようにして、冗長なコードを回避したいと考えています。または、たとえば、モデル (MyModel) を外側のメイン グリッドにバインドし、テキスト ボックスをビュー モデルのプロパティにバインドする簡単な方法はありますか (データグリッドで itemsource をバインドした場合と同様)。

4

2 に答える 2