我创建了一个简单的MVVM,只有三个类CashFlowView,CashFlowViewModel,CashFlowModel。MVVM中的ObjectDataProvider不是必需的吗?
我使用了一个infragistic的9.1 XamDataPresenter(或者xamDataGrid)。
<igDP:XamDataPresenter Name="xamDataPresenter1" DataSource="{Binding Source={StaticResource CashFlowData}}">
<ObjectDataProvider x:Key="CashFlowData" ObjectType="{x:Type ViewModel:CashflowViewModel}" MethodName="GetCashFlows" />
在我的视图模型:
public ObservableCollection<CashflowModel> GetCashFlows()
{
return new ObservableCollection<CashflowModel>() { ... };
}
视图模型连接通过此功能查看:
this.DataContext = new CashflowViewModel();
只要我在网格连接到ObjectDataProvider的完美它运行良好。但我希望能够连接到我的ViewModel中的一个属性。
根据Infragistics的所有我需要做的是这样的:
<igDP:XamDataGrid DataSource="{Binding Path=ViewModelCollection}"/>
但在这种情况下,看来我需要绑定到另一个视图模型的集合,代表网格内我行。那就是我感到困惑的地方。
我尝试这样做,它不工作:
<igDP:XamDataPresenter Name="xamDataPresenter1" DataSource="{Binding Path=CashFlows}">
视图模型内部:
public ObservableCollection<CashflowDataGridViewModel> CashFlows
{
get
{
return new ObservableCollection<CashflowDataGridViewModel>();
}
}
但是我怎么创建我的第二个视图模型(CashflowDataGridViewModel)?
我尝试添加第二个视图模型中则此属性:
public CashflowModel CashFlow
{
get
{
return new CashflowModel() {...};
}
}
但我得到显示在我的观点是没有任何实际cashflowModel类的基本报头的“现金流”列标题。
嗨,Eric,它已经这样连接了:this。DataContext = new CashflowViewModel();我有第二个ViewModel(CashflowDataGridViewModel)中的一个属性,我可以看到该属性。但不是每行的CashflowModel的实际内容。也许我需要截图来澄清这... – Houman 2010-06-30 16:12:36
我只是重新读你的问题,我想我知道你在问什么。 您的CashFlowViewModel需要公开一个ObservableCollection,其中FlowViewModel表示将包含在DataGrid的一行中的数据?那是对的吗? 如果是这样,那么创建FlowViewModel应该非常简单。创建一个实现INotifyPropertyChanged接口的新类。为行中的每个条目创建属性,并确保更改触发PropertyChanged事件。 –
2010-06-30 19:28:32
Thankkkk你,它的工作! :) 现在我明白了。它很容易将通知添加到模型本身。但是我认为这是一个错误,因为我们会使用INotifyPropertyChanged之类的接口来监视模型。因此,最好有一个包装模型的第二个ViewModel,并在其中添加INotifyPropertyChanged功能。我的假设是否正确? – Houman 2010-07-01 09:27:58