IsChecked is set to false
本文关键字:false to set is IsChecked | 更新日期: 2023-09-27 18:26:29
在上周搜索并尝试了几个选项后,我似乎找不到我要找的东西;也许这里有人可以帮忙。在阅读本文时,请记住,尽管我对WPF相对陌生,但我正试图尽可能严格地使用MVVM。顺便说一句,我正在使用Mahapps.Metro来设计我的窗口和控件,可以在这里找到。
我有一个XML文件,我的应用程序用于配置(我无法使用app.config文件,因为该应用程序无法安装在用户的系统上)。应用程序将在启动时查找该文件,如果找不到该文件,它将创建它
<?xml version="1.0" encoding="utf-8"?>
<prefRoot>
<tabReport>
<cbCritical>True</cbCritical>
</tabReport>
我在Window.Resources:
中引用了XML
文件
<Controls:MetroWindow.Resources>
<XmlDataProvider x:Key="XmlConfig"
Source="%appdata%'Vulnerator'Vulnerator_Config.xml"
XPath="prefRoot"
IsAsynchronous="False"
IsInitialLoadEnabled="True"/>
</Controls:MetroWindow.Resources>
并将其用作我的MainWindow:
的DataContext
<Controls:MetroWindow DataContext="{DynamicResource XmlConfig}">
接下来,我设置了一个"字符串到布尔"的转换器:
class StringToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
bool? isChecked = (bool?)value;
return isChecked;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
string isChecked = value.ToString();
return isChecked;
}
return string.Empty;
}
}
最后,我将IsChecked
与适当的XPath:
结合
<Checkbox x:Name="cbCritical"
Content="Critical"
IsChecked="{Binding XPath=//tabReport/cbCritical,
Converter={StaticResource StringToBool}}" />
所有这些之后,应用程序加载,但IsChecked
被设置为false
。。。任何想法都会对这里有所帮助;提前感谢!
两件事:
- 您的转换器最好不要返回null,而是默认返回
false
。如果由于任何原因转换失败,请返回一个实际值 - 代码
(bool?)value
不会将字符串转换为布尔值。将其更改为:
CCD_ 11。