문제
현재 내 모델에는 10 가지 속성이 있습니다. AnnualizedRate1
, AnnualizedRate2
, ..., AnnualizedRate10
10 개의 속성을 통해보기 모델의 뷰로 밝혀진다. Rate1
, Rate2
, ..., Rate10
. 내 견해 중 하나는 이러한 값을 a 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); } }
어디 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>
아무도 아이디어가 있습니까?
해결책
데이터를 저장하고 그리드를 바인딩하기 위해 사용하고 관찰하여 수집 할 것입니다.
다른 팁
RB Davidson이 한 일을 수행하는 코드는 다음과 같습니다. 이것이 당신이 원하는 일을한다는 것을 알게되면 그에게 신용을주십시오. 그의 대답은 맞다.
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
}
}
}
거기에서 실제로 데이터베인딩을 사용하여 시야에서 열을 만듭니다. 이 연간화물 컬렉션에 묶일 것입니다. WPF 툴킷이 쉽게 만들어지지 않으므로 ObservableCollection<AnnualizedRateViewModel>
an ObservableCollection<DataGridColumn>
.
<dg:DataGrid AutoGenerateColumns="false" Columns="{Binding AnnualizedRates, ValueConverter={StaticResource AnnualizedRatesToDataGridColumnCollectionConverter}}">
</dg:DataGrid>
여기서 배워야 할 것은 자신에게 "반복"을 생각할 때, 대신 "컬렉션"을 생각해보십시오.
행운을 빕니다 ... 그리고 다시, 신용 RB Davidson.
제휴하지 않습니다 StackOverflow