在我的视野里我有一个数据。属性的绑定如下
ItemsSource="{Binding}"另外,在代码背后,我通过执行以下操作设置了数据文本:
DataContext = ProcedureDatabaseViewModel.Procedures();视图模型中的过程函数成功地输出了DataGrid成功显示的列表。
现在的问题是,整个页面的数据文本现在被设置为上面的内容。其结果是与VM交互的其他元素不再工作。例如,带有VM中的命令的按钮。我尝试移除后面代码中数据文本的设置,但不知道如何填充数据集。请注意,当在上下文后面的代码中没有设置DataContext时,我相信会将其更改为VM,因此,其他元素将重新开始工作。我尝试将Itemssource属性更改为目标对象列表,这些对象是我希望填充数据集的对象,但它没有工作。
清单是
List<procedure> Procedures而且它在ProdureDatabaseViewModel中。我试着把它当作
ItemsSource="{Binding ProdureDatabaseViewModel.Procedures}"但这种做法也没有奏效。
有人能告诉我正确的方法吗?
发布于 2016-01-12 14:33:46
最干净的方法是使用ItemsSource将过程集合绑定到DataGrid。要使其工作,程序必须是一个属性。若要避免进一步的问题,请使用ObservableCollection。它应该是这样的:
ObservableCollection<procedure> Procedures { get; set; }那么您应该能够简单地将其绑定到
ItemsSource="{Binding Procedures}"发布于 2016-01-12 14:29:55
我更喜欢将视图构造函数中的DataContext设置为完整的ViewModel (我为这个特殊视图创建的)。
所以我在视图的构造函数中做了这样的事情:
public View(ProcedureDatabaseViewModel viewModel)
{
this.DataContext = viewModel;
}这样,其他的一切都应该仍然有效,你可以使用的不仅仅是程序。
接下来,将这些过程绑定到数据集:
ItemsSource="{Binding ProcedureList}"
请注意,要使其工作,“过程”必须是一个属性。您的问题中不清楚它是函数、属性还是简单的类成员。如果它是一个函数,您可以在视图模型中这样做:
public List<procedure> ProcedureList
{
get { return this.Procedures(); }
}发布于 2016-01-12 14:43:09
我尝试移除后面代码中数据文本的设置,但不知道如何填充数据集。
您可以像这样分别设置DataContext的DataGrid,MyDataGrid.DataContext = ProcedureDatabaseViewModel.Procedures();。
并为您的DataContext应用单独的Page。
https://stackoverflow.com/questions/34745615
复制相似问题