Я создал простой MVVM, только с тремя классами CashFlowView, CashFlowViewModel, CashFlowModel.ObjectDataProvider в MVVM не нужен?
Я использую инфраструктурный 9.1 XamDataPresenter (или xamDataGrid).
<igDP:XamDataPresenter Name="xamDataPresenter1" DataSource="{Binding Source={StaticResource CashFlowData}}">
<ObjectDataProvider x:Key="CashFlowData" ObjectType="{x:Type ViewModel:CashflowViewModel}" MethodName="GetCashFlows" />
Внутри моего ViewModel:
public ObservableCollection<CashflowModel> GetCashFlows()
{
return new ObservableCollection<CashflowModel>() { ... };
}
ViewModel подключен к Смотреть на это:
this.DataContext = new CashflowViewModel();
Пока я подключить сетку к ObjectDataProvider его отлично работает нормально. Но я хотел бы просто подключиться к свойству в моей модели ViewModel.
Согласно Infragistics все, что я должен сделать это:
<igDP:XamDataGrid DataSource="{Binding Path=ViewModelCollection}"/>
Но в данном случае, похоже, мне нужно привязать к коллекции другого ViewModel, чтобы представить свои ряды внутри сетки. И вот где я запутался.
Я попробовал это, и он не работает:
<igDP:XamDataPresenter Name="xamDataPresenter1" DataSource="{Binding Path=CashFlows}">
Внутри ViewModel:
public ObservableCollection<CashflowDataGridViewModel> CashFlows
{
get
{
return new ObservableCollection<CashflowDataGridViewModel>();
}
}
Но как создать свой второй ViewModel (CashflowDataGridViewModel)?
Я попытался добавить этот proprty в этом втором ViewModel:
public CashflowModel CashFlow
{
get
{
return new CashflowModel() {...};
}
}
Но я получаю показано на мой взгляд, «Cashflow» заголовок столбца без какого-либо из основных заголовков фактического класса cashflowModel.
Привет, Эрик, это уже связано вот так: это.DataContext = new CashflowViewModel(); У меня есть одно свойство внутри второго ViewModel (CashflowDataGridViewModel), и я вижу это свойство. Но не фактическое содержание CashflowModel для каждой строки. Может быть, мне нужны скриншоты, чтобы прояснить это ... – Houman
Я просто перечитываю ваш вопрос, и я думаю, что знаю, что вы просите. Ваш документ CashFlowViewModel должен вывести ObservableCollection, где FlowViewModel представляет данные, которые будут содержаться в одной строке DataGrid? Это верно? Если это так, то создание FlowViewModel должно быть довольно простым. Создайте новый класс, который реализует интерфейс INotifyPropertyChanged. Создайте свойства для каждой записи в строке и убедитесь, что изменения инициируют событие PropertyChanged. –
Thankkkk вы, его работа! :) Теперь я понимаю. Его соблазн просто добавить уведомления к самой модели. Но я думаю, что это ошибка, так как мы будем использовать модель с интерфейсом, таким как INotifyPropertyChanged. Следовательно, лучше иметь второй ViewModel, который обертывает модель и добавляет туда возможности INotifyPropertyChanged. Правильно ли мое предположение? – Houman