Я уверен, что это что-то глупое, но я играю с привязкой данных. У меня есть флажок и метка на форме. То, что я пытаюсь сделать, это просто связать содержимое метки со значением 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}"
Есть идеи?
Спасибо
John