我有一个带有DataGrid的View1并设置了View1.DataContext = ViewModel1
。
ViewModel1有一个ObservableCollection<Dto>
,我绑定到DataGrid的ItemSource。
现在,我有另一个带有一组复选框的View2和一个ViewModel2作为其DataContext。
我必须根据ViewModel2属性在View1中的DataGrid中设置列的可见性。我是WPF的新手,不知道这是否有权做以及如何实现它。
答案 0 :(得分:0)
顾名思义,ViewModel应该包含显示视图所需的所有数据。您应该将ViewModel2中的可见性标志作为ViewModel1中的属性,以便在ViewModel1中显示显示View1所需的所有信息。
遵循此路径,您的代码将更易于维护,并且无需对View1.DataContext的默认行为进行任何特殊处理即可运行。如果ViewModel1依赖于ViewModel2,则View1也依赖于ViewModel2。如果您只有2个ViewModel,这可能不是问题。但是一旦您的应用程序增长,您将拥有更多ViewModel,如果您继续依赖它们,您的应用程序将在很短的时间内无法维护。
答案 1 :(得分:0)
您可以在ViewModel1中公开ViewModel2,这是一个示例
public class ViewModel1
{
public ViewModel2 {get;set;}
public ViewModel1()
{
this.ViewModel2 = new ViewModel2(); //or you can send ViewModel2 instance as a parameter
}
}
现在您可以将DataContext
设置为以下
{Binding
ViewModel2.someproperty}
如果ViewModels需要了解彼此之间的事情,则需要考虑以下其中一项