【发布时间】:2011-07-20 11:58:43
【问题描述】:
我偶然发现了以下问题。我有一个复选框,其IsChecked 属性绑定到我的MainWindow 类中的CLR 属性。这是源代码。
隐藏代码 (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>
现在的问题是,当用户选中或取消选中复选框时,属性IsPressAndHoldEnabled 永远不会调用(即消息框永远不会显示)的 set 访问器。但是,当我将属性重命名为其他名称时(例如 IsPressAndHoldEnabled2),它确实有效。
我现在的问题是:为什么我不能使用IsPressAndHoldEnabled 作为我的财产的名称?这与现有的Stylus.IsPressAndHoldEnabled 属性有什么关系吗?
【问题讨论】:
-
你能看到VS输出窗口有什么错误吗?
-
不,没有。当您提供一个不存在的属性名称时,我会检查它是否有类似“找不到属性”的内容。但没有错误。
标签: c# .net xaml data-binding binding