Проблема связывания WPF с определенными именами свойств - PullRequest
4 голосов
/ 22 марта 2011

Я наткнулся на следующую проблему. У меня есть флажок, свойство IsChecked которого привязано к свойству CLR в моем классе MainWindow. Вот исходный код.

Код позади (MainWindow.xaml.cs):

namespace MenuItemBindingTest {
  public partial class MainWindow : Window, INotifyPropertyChanged {
    private bool m_backedVariable = false;
    public bool IsPressAndHoldEnabled {
      get { return this.m_backedVariable; }
      set {
        this.m_backedVariable = value;
        OnPropertyChanged("IsPressAndHoldEnabled");
        MessageBox.Show("Item changed: " + this.m_backedVariable);
      }
    }

    public MainWindow() {
      InitializeComponent();
      this.m_checkbox.DataContext = this;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName) {
      if (this.PropertyChanged != null) {
        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
      }
    }
  }
}

XAML-код (MainWindow.xaml):

<Window x:Class="MenuItemBindingTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Binding Problem Test" Width="525" Height="350">
  <DockPanel>
    <CheckBox x:Name="m_checkbox" 
              IsChecked="{Binding IsPressAndHoldEnabled}"
              HorizontalAlignment="Center" VerticalAlignment="Center"
              Content="Is Press and Hold enabled"/>
  </DockPanel>
</Window>

Проблема теперь в том, что метод доступа set для свойства IsPressAndHoldEnabled никогда не вызывается (т. Е. Окно сообщения никогда не отображается), когда пользователь устанавливает или снимает флажок. Это работает, однако, работает, когда я переименовываю свойство во что-то другое, например IsPressAndHoldEnabled2.

Теперь у меня вопрос: почему я не могу использовать IsPressAndHoldEnabled в качестве названия для моей собственности? Это как-то связано со свойством Stylus.IsPressAndHoldEnabled существующий?

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Вы указали TwoWay в качестве режима привязки?Хотя я думаю, CheckBox.IsChecked по умолчанию TwoWay режим привязки ...

Я думаю, вы, возможно, испортили свой контекст привязки, так что он не находит свойство IsPressAndHoldEnabled.Привязки в WPF терпят неудачу молча - очень жаль, если вы спросите меня.

Убедитесь, что флажок действительно привязан к этому свойству и что контекст привязки действительно является вашим классом MainWindodwобъект.

1 голос
/ 22 марта 2011

Интересно.У меня нет ответов почему, но у меня есть обходные пути:

Разделение свойства IsPressAndHoldEnabled на отдельный класс ViewModel сработало, если класс не был получен из FrameworkElement.

Кроме того, изменениеиз обычного свойства в свойство зависимости в том же классе MainWindow, с которым работает - DP изменил вызовы.

...