C#WPF我如何拥有多个DataContext
我对WPF非常陌生,所以尽管找到了其他类似的线程,但我的代码有点不同,所以我不知道如何将这些解决方案应用到我的代码中C#WPF我如何拥有多个DataContext,c#,wpf,mvvm,C#,Wpf,Mvvm,我对WPF非常陌生,所以尽管找到了其他类似的线程,但我的代码有点不同,所以我不知道如何将这些解决方案应用到我的代码中 <grid> <CheckBox x:Name="sortChk" Content="Sort Variables" IsChecked="{Binding SortVariables}" /> <b:FlatButton Command="{Binding ClickCom
<grid>
<CheckBox
x:Name="sortChk"
Content="Sort Variables"
IsChecked="{Binding SortVariables}"
/>
<b:FlatButton Command="{Binding ClickCommand}">
<TextBlock Text="Compare" FontSize="13"></TextBlock>
</b:FlatButton>
</grid>
您可以看到我已经注释掉了DataContext=this。如果我不注释它并删除其他DataContext,那么我的SortVariables变量将采用复选框的值。如果我有按钮单击的其他DataContext,那么复选框将不会绑定。当我将其作为参数传递给DataCompareVM()时,需要将其绑定
我对WPF和MVVM非常陌生,请原谅我的无知。一个WPF控件不能有多个DataContext,您应该将属性移动到ViewModel。一个WPF控件不能有多个DataContext,您应该将属性移动到ViewModel。是,对于不同的元素,可以有不同的数据上下文。但在这里,您试图替换相同的窗口数据上下文 您可以做的是使用命名元素。将注释行替换为:
sortChk.DataContext = this;
现在,最长的答案是:您在这里并不是真正在做MVVM。正如Fildor提到的,您应该将SortVariables属性移动到DataCompareVM ViewModel
由于您似乎在与MVVM作斗争,我相信阅读我的介绍性书籍将有助于您理清思路:。是的,对于不同的元素,您可以有不同的数据上下文。但在这里,您试图替换相同的窗口数据上下文 您可以做的是使用命名元素。将注释行替换为:
sortChk.DataContext = this;
现在,最长的答案是:您在这里并不是真正在做MVVM。正如Fildor提到的,您应该将SortVariables属性移动到DataCompareVM ViewModel
由于您似乎在与MVVM作斗争,我相信阅读我的介绍性书籍将有助于您把事情弄清楚:.
SortVariables
应该是DataCompareVM的一个属性,如果您希望将复选框绑定到它。勾选/取消勾选复选框后,双向绑定将更新ViewModel中的属性值。还记得在设置了不同的值时引发propertychanged事件。我这样做了,它可以正常工作。谢谢<如果要将复选框绑定到DataCompareVM,则code>SortVariables应该是DataCompareVM的属性。勾选/取消勾选复选框后,双向绑定将更新ViewModel中的属性值。还记得在设置了不同的值时引发propertychanged事件。我这样做了,它可以正常工作。谢谢好的,您可以将子控件设置为不同的DC。。。不完全是将两个DCs设置为一个控件,但是……是的,你可以这样做,但是因为他使用的是MVVM模式,如果他使用一个DataContext,那就更清楚了。我完全同意。我只是想说,如果我们想挑剔,在一个控件中使用多个DataContext确实是可能的。我不是说“你应该”:)好吧,你可以将一个子控件设置为不同的DC。。。不完全是将两个DCs设置为一个控件,但是……是的,你可以这样做,但是因为他使用的是MVVM模式,如果他使用一个DataContext,那就更清楚了。我完全同意。我只是想说,如果我们想挑剔,在一个控件中使用多个DataContext确实是可能的。我不是说“您应该”:)我将SortVariables属性移动到DataCompareVM,它正在按我所希望的方式工作。谢谢出于好奇,由于我是MVVM新手,我向DataCompreVM传递参数(…我的参数…)这一事实是否打破了MVVM模式?不。MVVM模式是一种社区构建的模式,它有许多变体。您的路径参数没有破坏MVVM模式。我已将SortVariables属性移动到DataCompareVM,它正按照我的要求工作。谢谢出于好奇,由于我是MVVM新手,我向DataCompreVM传递参数(…我的参数…)这一事实是否打破了MVVM模式?不。MVVM模式是一种社区构建的模式,它有许多变体。您的路径参数不会破坏MVVM模式。