DependencyProperty bool в UserControl - PullRequest
       14

DependencyProperty bool в UserControl

3 голосов
/ 10 ноября 2011

У меня проблема с DependencyProperty в UserControl.Мой контроль выставляет два свойства Dependency, bool и string.Свойство string работает, а bool - нет.Я не получаю ошибок, но изменения никоим образом не отражаются.

Я определяю свойство следующим образом:

private static readonly DependencyProperty IncludeSubdirectoriesProperty =
    DependencyProperty.Register(
        "IncludeSubdirectories",
        typeof(bool),
        typeof(DirectorySelect),
        new FrameworkPropertyMetadata(false) { BindsTwoWayByDefault = true }
        );

public bool IncludeSubdirectories
{
    get { return (bool) GetValue(IncludeSubdirectoriesProperty); }
    set { SetValue(IncludeSubdirectoriesProperty, value); }
}

В XAML для пользовательского элемента управления я связываю свойство следующим образом:

<CheckBox
    Name="IncludeSubdirectoriesCheckbox"
    IsChecked="{Binding Path=IncludeSubdirectories, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    Include subfolders</CheckBox>

И когда я использую элемент управления, я привязываюсь к таким свойствам:

<Controls:DirectorySelect
    Directory="{Binding Directory}"
    IncludeSubdirectories="{Binding WatchSubDirs}"/>

«Каталог» - это строковое свойство, которое работает просто отлично.Я связываю их обоих одинаково, но я просто не могу заставить bool работать.

Где я ошибся?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Вы можете попробовать изменить привязку с помощью пользовательского элемента управления на привязку элемента.Прежде чем вы обязательно дадите свой userControl имя.

Затем измените:

     IsChecked="{Binding Path=IncludeSubdirectories, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

На что-то вроде этого:

     IsChecked="{Binding Path=IncludeSubdirectories, ElementName="<UserControlName>", Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

Еще одна проверка работоспособности, которую вы можете выполнить, - убедиться, что владелец типа для IncludeSubdirectoriesProperty 'указан правильно.

1 голос
/ 10 ноября 2011

попробуйте это, чтобы выяснить, что идет не так

private static readonly DependencyProperty IncludeSubdirectoriesProperty =
    DependencyProperty.Register(
        "IncludeSubdirectories",
        typeof(bool),
        typeof(DirectorySelect),
        new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnIncludeSubdirectoriesPropertyChanged)) { BindsTwoWayByDefault = true }
        );

privatestaticvoid OnIncludeSubdirectoriesPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
  // make a breakpoint here
}

отладочные привязки

<CheckBox Name="IncludeSubdirectoriesCheckbox"
          IsChecked="{Binding Path=IncludeSubdirectories, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, diagnostics:PresentationTraceSources.TraceLevel=High}">Include subfolders</CheckBox>

и

<Controls:DirectorySelect Directory="{Binding Directory}" IncludeSubdirectories="{Binding WatchSubDirs, diagnostics:PresentationTraceSources.TraceLevel=High}"/>

необходимо включить

<Window xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase" />

также измените настройки трассировки WPF в Сервис-> Параметры-> Отладка-> Окно вывода на привязку данных = Предупреждение

Теперь посмотрите в окне вывода, что происходит

надеюсь, это поможет

...