0

我刚刚开始使用 WPF,并且一直在阅读“ Sams Teach Yourself WPF ”。在第 6 章中,它在后面的代码中介绍了对属性的绑定,如下所示。这种方法对我来说取得了不一致的成功。

在我当前的项目中,此方法适用于我绑定到标签的两个双精度数。当我尝试使用相同的方法将 bool 绑定到 MenuItem 的 IsEnabled 属性时,该方法失败。

然后我回到书中的简单示例,并将属性类型从 String 更改为 bool。在这种情况下,我能够将布尔值绑定到 Button 和 TextBox。

我注意到当此方法失败时,OnChanged 函数中的 EventHandler 始终为空。我错过了什么?

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}"/>
4

2 回答 2

1

您面临的问题是实例化表单副本的代码需要为“MyStringChanged”事件注册一个侦听器。

检查您声明表单实例的位置:即

var myForm = new TestForm();
TestForm.Show();

您需要添加:

var myForm = new TestForm();
myForm.MyStringChanged += someHandlingMethod;
TestForm.Show();

样本中应该提到类似的东西。

老实说,虽然这不是我读过的一个很好的样本。他们正在使用 WPF 制作一个 WinForm 风格的应用程序。要学习 WPF,您需要查看 MVVM。这当然不是 24 小时的任务。做完以上你还不如构建一个 WinForm 应用程序,它会为你省去很多麻烦。

于 2012-09-27T04:05:30.170 回答
0

问题出在我身上。我在 XAML 绑定路径中拼错了变量名。如果绑定路径无效,我希望收到编译器警告或异常。即使将绑定模式更改为“TwoWay”,也不会在绑定路径不存在的情况下产生任何警告或运行时异常。很抱歉浪费您的时间。

于 2012-09-27T11:30:48.603 回答