我刚刚开始使用WPF,并且一直在阅读“ Sams教你自己WPF ”。在第6章中,它介绍了绑定到后面代码中的属性,如下所示。这种方法对我来说是不成功的。
在我目前的项目中,此方法适用于两个双打,其值与标签绑定。当我尝试使用相同的方法将bool绑定到MenuItem的IsEnabled属性时,该方法失败。
然后我回到书中的简单示例,并将属性类型从String更改为bool。在这种情况下,我能够将bool绑定到Button和TextBox。
我注意到当此方法失败时,OnHhanged函数中的EventHandler始终为null。我错过了什么?
private String _myString;
public String MyString
{
get { return _myString; }
set
{
_myString = value;
OnMyStringChanged();
}
}
public event EventHandler MyStringChanged;
private void OnMyStringChanged()
{
if (MyStringChanged != null)
MyStringChanged(this, EventArgs.Empty);
}
我的MainWindow类中有以下XAML。在MainWindow的构造函数中,我将DataContext设置为包含MyString的类的新实例。
<TextBox Text="{Binding Path=MyString, Mode=TwoWay}"
Margin="4"/>
<Button Grid.Row="1"
Height="40"
Margin="4"
Click="Button_Click"
Content="{Binding Path=MyString, Mode=TwoWay}"/>
答案 0 :(得分:1)
您面临的问题是,实例化表单副本的代码需要向&#34; MyStringChanged&#34;注册一个监听器。事件
检查您声明表单实例的位置: 即。
var myForm = new TestForm();
TestForm.Show();
您需要添加:
var myForm = new TestForm();
myForm.MyStringChanged += someHandlingMethod;
TestForm.Show();
样本中应该提到类似的东西。
老实说虽然它不是我读过的很好的样本。他们正在使用WPF制作WinForm风格的应用程序。要学习WPF,您需要关注MVVM。那肯定不是一个24小时的任务。执行上述操作您也可以构建一个WinForm应用程序,它将为您节省很多麻烦。
答案 1 :(得分:0)
问题出在我身上。我在XAML绑定路径中拼错了变量名。如果绑定路径无效,我期望收到编译器警告或异常。即使将绑定模式更改为“TwoWay”也不会产生任何警告或运行时异常与不存在的绑定路径。抱歉浪费你的时间。