【发布时间】:2018-07-09 14:13:37
【问题描述】:
我有以下配置:
MainWindow.xaml
<Window x:Class="MYNS.MainWindow"
mc:Ignorable="d"
x:Name="mainWindow"
...
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public Options Options { get; private set; }
public MainWindow()
{
Options = new Options();
}
}
Options.xaml
class Options
{
public bool QuietMode { get; set; }
public Options()
{
QuietMode = true;
}
}
现在我想将此布尔值绑定到另一个窗口的CheckBox 控件,所以我有
OptionsWindows.xaml
<CheckBox
Content="Quiet Mode"
DataContext="{Binding ElementName=mainWindow, Path=Options}"
IsChecked="{Binding Path=QuietMode}"
/>
虽然我会做到这一点,但它不起作用(我尝试了多种类似的方法,但到目前为止都没有奏效)。由于我对 WPF 很陌生,我想我显然在这里遗漏了一些东西。
【问题讨论】:
-
两个窗口可以共享同一个DataContext。
-
很明显
Options属性是一个“模型”属性,需要在视图模型中,而不是在视图类中。 -
@dymanoid:实际上,到目前为止,我不需要将 Options 对象直接绑定到 OptionsView 中的任何东西(尽管从另一个视图设置,但这些 Options 已在 MainWindow 代码中使用),所以没有到目前为止还不是问题
-
“到目前为止”表示您现在需要它。这就是为什么你应该按照之前的 cmets 的建议,将这些数据重构到一个共同的地方(一个共同的 Model 或 ViewModel,它将是两个 View 的 DataContext)。
-
@heltonbiker:我明白你在说什么,但不清楚这个 Options 的实际实例(或包含它的 DataModel)将在哪里声明和保存。我想在某处明确分配逻辑对象(如
Options),如果不是静态实例,我看不出谁将拥有Options。
标签: c# wpf xaml data-binding