将标签数据绑定到复选框时,WPF设计器会出现异常

时间:2010-04-01 22:32:01

标签: data-binding c#-4.0 binding

我确定这是愚蠢的,但我正在玩数据绑定。我在表单上有一个复选框和一个标签。我想要做的只是将标签的内容绑定到复选框的IsChecked值。

我所做的事情运行良好(没有编译错误并按预期行事),但是如果我触摸XAML中的标签,设计师会产生异常:

System.NullReferenceException 你调用的对象是空的。    在MS.Internal.Designer.PropertyEditing.Editors.MarkupExtensionInlineEditorControl.BuildBindingString(Boolean modeSupported,PropertyEntry propertyEntry)    在

<Window x:Class="UnitTestHelper.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:FileSysCtls="clr-namespace:WPFFileSystemUserControls;assembly=WPFFileSystemUserControls"
    xmlns:HelperClasses="clr-namespace:UnitTestHelper"
    Title="MainWindow" Height="406" Width="531">
<Window.Resources>
    <HelperClasses:ThreestateToBinary x:Key="CheckConverter" />
</Window.Resources>
<Grid Height="367" Width="509">
    <CheckBox Content="Step into subfolders" Height="16" HorizontalAlignment="Left" Margin="17,254,0,0" Name="chkSubfolders" VerticalAlignment="Top" Width="130" IsThreeState="False" />
    <Label Height="28" HorizontalAlignment="Left" Margin="376,254,0,0" Name="lblStepResult" VerticalAlignment="Top" Width="120" IsEnabled="True" Content="{Binding IsChecked, ElementName=chkSubfolders, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource CheckConverter}}" />
</Grid>

ThreeStateToBinary类如下:

    class ThreestateToBinary : IValueConverter
{

    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if ((bool)value)
            return "Checked";
        else
            return "Not checked";
        //throw new NotImplementedException();
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return ((string)value == "Checked");
        //throw new NotImplementedException();
    }

    #endregion
}

老实说,我现在正在玩它。它原本更简单(不使用ValueConverter),但在我将内容设置为:

时显示类似的行为
Content="{Binding IsChecked, ElementName=chkSubfolders, UpdateSourceTrigger=PropertyChanged}" 

有什么想法吗?

谢谢,

约翰

1 个答案:

答案 0 :(得分:0)

尝试删除UpdateSourceTrigger=PropertyChanged。在这种情况下,复选框是您的来源,标签是您的目标。标签不会更改,此外,您将模式设置为OneWay,它将从源绑定到目标。因此,告诉它更新源属性更改的绑定是没有意义的。它可能不会导致你的问题,但似乎怀疑(或至少很奇怪)。