質問

現在、私のモデルには10個のプロパティがあり、ここではここでは AnnualizedRate1 AnnualizedRate2 、...、 AnnualizedRate10 を呼び出します。 10個のプロパティ Rate1 Rate2 、...、 Rate10 を介して、ビューモデルのビューに表示されます。私のビューの1つは、これらの値を DataGrid に表示します。これは非常に反復的であり、変化する要件に適応するための苦痛です。以下よりも良い方法が必要です。

モデル( MyModel ):

public decimal AnnualizedRate1 { get { return this.AnnualizedRate(1); } }
public decimal AnnualizedRate2 { get { return this.AnnualizedRate(2); } }
...
public decimal AnnualizedRate10 { get { return this.AnnualizedRate(10); } }

where MyModel.AnnualizedRate

public decimal AnnualizedRate(int i);

ビューモデル( MyViewModel ):

public decimal Rate1 { get { return myModel.AnnualizedRate1; } }
public decimal Rate2 { get { return myModel.AnnualizedRate2; } }
...
public decimal Rate10 { get { return myModel.AnnualizedRate10; } }

表示( MyView ):

xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
...
    <dg:DataGrid>
        <dg:DataGrid.Columns>
            <dg:DataGridTextColumn
                Header="Rate1" 
                Binding="{Binding Rate1, StringFormat=P}"
                IsReadOnly="True"/>
            <dg:DataGridTextColumn
                Header="Rate2" 
                Binding="{Binding Rate2, StringFormat=P}"
                IsReadOnly="True"/>
            ...
            <dg:DataGridTextColumn
                Header="Rate10" 
                Binding="{Binding Rate10, StringFormat=P}"
                IsReadOnly="True"/>
        </dg:DataGrid.Columns>
    </dg:DataGrid>

アイデアはありますか?

役に立ちましたか?

解決

ObservableCollectionを使用してデータを保存し、グリッドをバインドします。

他のヒント

RBデイビッドソンが言ったことを行うためのコードは次のとおりです。これがあなたが望んだことをすることを見つけたら、彼に信用を与えてください。彼の答えは正しい。

ViewModelで:

public class AnnualizedRateViewModel
{
     public string Name { get; set; }
     public decimal Rate { get; set; }
}

public MyViewModel : INotifyPropertyChanged
{

public MyViewModel()
{
     AnnualizedRates = new ObservableCollection<AnnualizedRateViewModel>();
     //I'd recommend your model having a GetAllRates() function rather than this,
     //but for demo purposes, this works
     for(int i = 1; i <= 10; i++)
     {
          AnnualizedRates.Add(new AnnualizedRateViewModel()
          {
               Name = string.Format("Rate {0}", i),
               Rate = MyModel.AnnualizedRate(i)
          });
     }
}

private ObservableCollection<int> _annualizedRates;
public ObservableCollection<int> AnnualizedRates
{
     get { return _annualizedRates; }
     set
     {
          _annualizedRates = value;
          //Raise OnNotifyPropertyChanged event from your
          //implementation of INotifyPropertyChanged in your viewmodel
          //the full implementation of this is outside the scope of this demo
     }
}

}

そこから、実際にデータバインディングを使用してビューに列を作成します。このAnnualizedRatesのコレクションにバインドします。 WPF Toolkitはこれを簡単にできないため、 ObservableCollection&lt; AnnualizedRateViewModel&gt; ObservableCollection&lt; DataGridColumn&gt; に変換する値コンバーターを作成する必要があります。 p>

<dg:DataGrid AutoGenerateColumns="false" Columns="{Binding AnnualizedRates, ValueConverter={StaticResource AnnualizedRatesToDataGridColumnCollectionConverter}}">
</dg:DataGrid>

ここで学ぶべきことは、「繰り返し」を自分で考えているときに、「コレクション」を考えてみてください。

幸運...そして、RBデビッドソンを称えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top