我确定这是愚蠢的,但我正在玩数据绑定。我在表单上有一个复选框和一个标签。我想要做的只是将标签的内容绑定到复选框的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}"
有什么想法吗?
谢谢,
约翰
答案 0 :(得分:0)
尝试删除UpdateSourceTrigger=PropertyChanged
。在这种情况下,复选框是您的来源,标签是您的目标。标签不会更改,此外,您将模式设置为OneWay
,它将仅从源绑定到目标。因此,告诉它更新源属性更改的绑定是没有意义的。它可能不会导致你的问题,但似乎怀疑(或至少很奇怪)。