数据绑定导致页面上的其他功能在填充数据网格时不起作用
Databinding causing other functions on page not to work when filling datagrid
我的视图中有一个数据网格。数据网格的项目源 属性 是这样绑定的
ItemsSource="{Binding}"
此外,在代码隐藏中,我通过执行以下操作设置了数据上下文:
DataContext = ProcedureDatabaseViewModel.Procedures();
viewmodel 中的 Procedures 函数成功输出了 DataGrid 成功显示的列表。
现在的问题是整个页面的datacontext现在设置为上面的。这样做的结果是与 VM 交互的其他元素不再起作用。 IE。具有在 VM 中找到的命令的按钮。我曾尝试在后面的代码中删除数据上下文的设置,但无法弄清楚如何以其他方式填充数据网格。请注意,当 DataContext 未在代码中设置时,我相信上下文将更改为 VM,因此其他元素将再次开始工作。我尝试更改 Itemssource 属性 以定位我希望用来填充数据网格的对象列表,但它没有用。
名单是
List<procedure> Procedures
它在 ProdureDatabaseViewModel 中。我试图将其定位为
ItemsSource="{Binding ProdureDatabaseViewModel.Procedures}"
但这也没有用。
有人可以告诉我正确的方法吗?
我更喜欢将视图构造函数中的 DataContext 设置为完整的 ViewModel(我为此特殊视图创建的)。
所以我在视图的构造函数中做了这样的事情:
public View(ProcedureDatabaseViewModel viewModel)
{
this.DataContext = viewModel;
}
这样一来,其他一切都应该仍然有效,而且您可以使用的不仅仅是程序。
接下来将过程绑定到数据网格:
ItemsSource="{Binding ProcedureList}"
请注意,"Procedures" 必须是 属性 才能正常工作。在你的问题中不清楚它是一个函数,一个 属性 还是一个简单的 class 成员。如果它是一个函数,你可以在你的视图模型中这样做:
public List<procedure> ProcedureList
{
get { return this.Procedures(); }
}
最简洁的方法是使用 ItemsSource 将 Procedures 集合绑定到 DataGrid。为此,程序必须是 属性。为避免进一步的问题,请使用 ObservableCollection。它应该是这样的:
ObservableCollection<procedure> Procedures { get; set; }
那么你应该可以简单地通过
ItemsSource="{Binding Procedures}"
I have tried removing the setting of the datacontext in the code
behind but cannot figure out how to populate the datagrid otherwise.
您可以像这样单独设置 DataGrid 的 DataContext,MyDataGrid.DataContext = ProcedureDatabaseViewModel.Procedures();
。
并为您的Page
申请单独的DataContext
。
我的视图中有一个数据网格。数据网格的项目源 属性 是这样绑定的
ItemsSource="{Binding}"
此外,在代码隐藏中,我通过执行以下操作设置了数据上下文:
DataContext = ProcedureDatabaseViewModel.Procedures();
viewmodel 中的 Procedures 函数成功输出了 DataGrid 成功显示的列表。
现在的问题是整个页面的datacontext现在设置为上面的。这样做的结果是与 VM 交互的其他元素不再起作用。 IE。具有在 VM 中找到的命令的按钮。我曾尝试在后面的代码中删除数据上下文的设置,但无法弄清楚如何以其他方式填充数据网格。请注意,当 DataContext 未在代码中设置时,我相信上下文将更改为 VM,因此其他元素将再次开始工作。我尝试更改 Itemssource 属性 以定位我希望用来填充数据网格的对象列表,但它没有用。
名单是
List<procedure> Procedures
它在 ProdureDatabaseViewModel 中。我试图将其定位为
ItemsSource="{Binding ProdureDatabaseViewModel.Procedures}"
但这也没有用。
有人可以告诉我正确的方法吗?
我更喜欢将视图构造函数中的 DataContext 设置为完整的 ViewModel(我为此特殊视图创建的)。
所以我在视图的构造函数中做了这样的事情:
public View(ProcedureDatabaseViewModel viewModel)
{
this.DataContext = viewModel;
}
这样一来,其他一切都应该仍然有效,而且您可以使用的不仅仅是程序。
接下来将过程绑定到数据网格:
ItemsSource="{Binding ProcedureList}"
请注意,"Procedures" 必须是 属性 才能正常工作。在你的问题中不清楚它是一个函数,一个 属性 还是一个简单的 class 成员。如果它是一个函数,你可以在你的视图模型中这样做:
public List<procedure> ProcedureList
{
get { return this.Procedures(); }
}
最简洁的方法是使用 ItemsSource 将 Procedures 集合绑定到 DataGrid。为此,程序必须是 属性。为避免进一步的问题,请使用 ObservableCollection。它应该是这样的:
ObservableCollection<procedure> Procedures { get; set; }
那么你应该可以简单地通过
ItemsSource="{Binding Procedures}"
I have tried removing the setting of the datacontext in the code behind but cannot figure out how to populate the datagrid otherwise.
您可以像这样单独设置 DataGrid 的 DataContext,MyDataGrid.DataContext = ProcedureDatabaseViewModel.Procedures();
。
并为您的Page
申请单独的DataContext
。