문제

현재 내 모델에는 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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top