首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IsChecked设置为false

IsChecked设置为false
EN

Stack Overflow用户
提问于 2014-10-15 11:04:59
回答 1查看 74关注 0票数 1

在过去的一周里,在搜索和尝试了几个选项后,我似乎找不到我想要的东西;也许这里有人可以帮助我。在通读本文时,请记住,尽管我是WPF的新手,但我正试图尽可能严格地使用MVVM。顺便说一句,我正在使用Mahapps.Metro设置我的窗口和控件的样式,发现here

我有一个XML文件,我的应用程序使用它进行配置(我不能使用app.config文件,因为应用程序不能安装在用户的系统上)。应用程序将在启动时查找该文件,如果未找到该文件,则会创建该文件。下面是XML的一个片段:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<prefRoot>
  <tabReport>
    <cbCritical>True</cbCritical>
  </tabReport>

我在Window.Resources:中引用了XML文件

代码语言:javascript
复制
<Controls:MetroWindow.Resources>
        <XmlDataProvider x:Key="XmlConfig"
                         Source="%appdata%\Vulnerator\Vulnerator_Config.xml"
                         XPath="prefRoot"
                         IsAsynchronous="False"
                         IsInitialLoadEnabled="True"/>
</Controls:MetroWindow.Resources>

并将其用作MainWindow:DataContext

代码语言:javascript
复制
<Controls:MetroWindow DataContext="{DynamicResource XmlConfig}">

接下来,我设置了一个"string-to-bool“转换器:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<Checkbox x:Name="cbCritical"
          Content="Critical"
          IsChecked="{Binding XPath=//tabReport/cbCritical, 
                      Converter={StaticResource StringToBool}}" />

在所有这些之后,应用程序加载,但是IsChecked被设置为false...在这里,任何想法都会有帮助;提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2014-10-15 11:18:41

两件事:

默认情况下,您的转换器最好不要返回,而是返回false。如果由于某种原因导致转换失败,则返回一个实际值。

  1. 代码(bool?)value不会将字符串转换为布尔值。更改为:

return (value.ToLower() == "true")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26373821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档