我是WPF的新手,所以尽管找到了其他类似的线程,但我的代码有点不同,所以我不知道如何将这些解决方案应用到我的。
<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>
背后的代码看起来像这样
string dataset1FullPath = null;
string dataset2FullPath = null;
string dataset1FilePath = null;
string dataset2FilePath = null;
public bool SortVariables { get; set; }
public SingleCompareWindow(string path1, string path2)
{
InitializeComponent();
dataset1FullPath = path1;
dataset2FullPath = path2;
dataset1FilePath = System.IO.Path.GetDirectoryName(path1);
dataset2FilePath = System.IO.Path.GetDirectoryName(path2);
//DataContext = this;
DataContext = new DataCompareVM(dataset1FullPath, dataset2FullPath, dataset1FilePath, dataset2FilePath, SortVariables);
}
你可以看到我已经注释掉了DataContext = this。如果我没有注释掉并删除其他DataContext,那么我的SortVariables变量将取复选框的值。如果我有按钮单击的其他DataContext,则复选框将不会绑定。我需要它绑定,因为我将它作为参数传递给DataCompareVM()。
我是WPF和MVVM的新手,请原谅我的无知。
答案 0 :(得分:1)
对于WPF控件,您不能拥有多个DataContext,您应该将属性移动到ViewModel。
答案 1 :(得分:1)
是的,您可以为不同的元素提供不同的数据上下文。但是在这里你试图替换相同的窗口数据上下文。
您可以使用指定的元素。用以下内容替换您的注释行:
sortChk.DataContext = this;
现在,最长的答案是:你在这里并没有真正做MVVM。正如Fildor所提到的,您应该将SortVariables属性移动到DataCompareVM ViewModel。
由于您似乎在与MVVM斗争,我相信阅读我的介绍性书籍将帮助您顺利完成任务:Learn WPF MVVM。