Дизайнер WPF выдает исключение при привязке метки к флажку - PullRequest
1 голос
/ 02 апреля 2010

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

1 Ответ

0 голосов
/ 02 апреля 2010

Попробуйте удалить UpdateSourceTrigger=PropertyChanged. В этом случае флажок - это ваш источник, а ярлык - ваша цель. Метка не меняется, и, кроме того, вы устанавливаете режим на OneWay, который связывает только от источника к цели. Поэтому бессмысленно говорить, что изменилась привязка для обновления источника по свойству. Возможно, это не является причиной вашей проблемы, но кажется подозрительным (или, по крайней мере, странным).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...