我的视图中有一个数据网格。 datagrid的itemssource属性被绑定为
ItemsSource="{Binding}"
在代码隐藏中,我通过执行以下操作设置了datacontext:
DataContext = ProcedureDatabaseViewModel.Procedures();
viewmodel中的Procedures函数成功输出DataGrid成功显示的列表。
现在的问题是整个页面的datacontext现在设置为上面的。结果是与VM交互的其他元素不再起作用。 I.E.具有VM中的命令的按钮。我已经尝试在后面的代码中删除datacontext的设置,但无法弄清楚如何填充datagrid。请注意,当在上下文代码中没有设置DataContext时,我认为上下文更改为VM,因此,其他元素再次开始工作。我已经尝试更改Itemssource属性以定位我希望填充数据网格但没有工作的对象列表。
列表是
List<procedure> Procedures
它位于ProdureDatabaseViewModel中。我试图将其定位为
ItemsSource="{Binding ProdureDatabaseViewModel.Procedures}"
但这也没有用。
有人可以告诉我正确的方法吗?
答案 0 :(得分:1)
最干净的方法是使用ItemsSource将Procedures集合绑定到DataGrid。为此,程序必须是财产。要避免进一步的问题,请使用ObservableCollection。它应该如下所示:
ObservableCollection<procedure> Procedures { get; set; }
然后你应该能够简单地绑定它
ItemsSource="{Binding Procedures}"
答案 1 :(得分:0)
我更喜欢将视图构造函数中的DataContext设置为完整的ViewModel(我为此特殊视图创建的)。
所以我在视图的构造函数中做了类似的事情:
public View(ProcedureDatabaseViewModel viewModel)
{
this.DataContext = viewModel;
}
这样一切都应该仍然有效,你可以使用的不仅仅是程序。
接下来,将过程绑定到datagrid:
ItemsSource="{Binding ProcedureList}"
请注意,为此,“程序”必须是属性。在你的问题中不清楚它是一个函数,一个属性还是一个简单的类成员。如果它是一个函数,你可以在视图模型中这样做:
public List<procedure> ProcedureList
{
get { return this.Procedures(); }
}
答案 2 :(得分:0)
我尝试删除代码中的datacontext设置 但是后面却无法弄清楚如何填充数据网格。
您可以像MyDataGrid.DataContext = ProcedureDatabaseViewModel.Procedures();
一样单独设置DataGrid的DataContext。
并为DataContext
单独应用Page
。