C# 从另一个类/视图模型更改WPF数据上下文中的属性值?

C# 从另一个类/视图模型更改WPF数据上下文中的属性值?,c#,wpf,data-binding,C#,Wpf,Data Binding,我试图理解数据上下文以及不同ViewModel中的属性如何应用于WPF中的窗口 假设我有一个简单的示例表单,其中包含以下代码: XAML代码隐藏 现在,我们假设在另一个类中有一个属性,它是一个布尔值,名为可见。此可见值用于折叠和显示特定元素 现在,我的困惑在于理解如何从另一个ViewModel操作这个Visible属性。看到我创建了另一个类的一个特定实例,在另一个时间点从另一个ViewModel更改Visible属性的正确方法是什么。。。通常,您会尝试避免WPF中的代码落后,并采用MVVM方式

我试图理解数据上下文以及不同ViewModel中的属性如何应用于WPF中的窗口

假设我有一个简单的示例表单,其中包含以下代码:

XAML代码隐藏 现在,我们假设在另一个类
中有一个属性,它是一个布尔值,名为
可见
。此可见值用于折叠和显示特定元素


现在,我的困惑在于理解如何从另一个ViewModel操作这个
Visible
属性。看到我创建了另一个类的一个特定实例,在另一个时间点从另一个ViewModel更改
Visible
属性的正确方法是什么。。。通常,您会尝试避免WPF中的代码落后,并采用MVVM方式

不管怎样,您必须将该属性设置为静态,使其跨实例存在,或者使用依赖项注入(DI)注入实例,以便需要更改该属性的人都可以访问该对象

对于(有偏见的)mvvm审查,您可以查看


我强烈建议你这样做,也许也要考虑DI,因为它们有很多框架可以帮助你(ninject和autofac会突然出现在脑海中,但谷歌搜索一下,有很多)。

我对MVVM了解不多,但我在这里违反了什么?我计划在ViewModel中完成所有工作,而不是在codebehind中。codebehind中唯一的内容是DataContext分配。这是应该避免的吗?起初,我有一堆静态类,但不确定这是否是最好的方法。看到人们这么说我很困惑。DataContext=newviewmodelclass();其他任何东西如何访问该类的实例化?您可以做任何您想做的事情。类不必是静态的。可以将属性设置为静态。您可以有一个管理器为您返回该类,因此在第一次调用时,它将创建(并将其保存为本地变量),在随后的调用中,将返回同一个类。“其他任何对象如何访问该类的实例化?”就像任何其他类访问任何应用程序中的任何其他类一样。你想做什么?@mm8注入它并控制对象?不确定您要问什么“在另一个时间点从另一个ViewModel更改Visible属性的正确方法是什么?”--您的问题中没有足够的上下文来避免其过于宽泛。简单的回答是,您可以在需要时更改属性,确保您设计了模型数据结构,以便它们可以在需要时访问所需的对象。在这种情况下,您的
另一个类
对象既不会被创建,也不会孤立存在。将设置数据结构,以便任何其他需要操作它的对象都有一个对它的引用。
    public partial class pageTest : Page
    {
        public pageTest ()
        {
            InitializeComponent();
            this.DataContext = new AnotherClass();
        }
    }
}