c# - WPF 数据绑定(bind)的新手

标签 c# wpf data-binding

我是 WPF 数据绑定(bind)的新手,有点卡住了。
显然我的文本框没有正确绑定(bind)到我想要的数据元素,我也不知道为什么。

首先在我的 MainWindow.xaml 文件中,我声明了一个对象:

<Window.Resources>
    <local:Aircraft x:Key="Aircraft"/>
</Window.Resources>

这会在 MainWindow.InitializeComponent()
期间创建一个 Aircraft 类型的对象 (我可以通过在 Aircraft 的构造函数上放置一个断点来验证这一点)

Aircraft 类在 .cs 文件中定义,其属性 Pilot 具有属性 Weight,因此myAircraft.Pilot.Weight 是一个 int

接下来,我尝试将文本框绑定(bind)到此属性:

<TextBox Name="PICWeight" DataContext="{Binding Source={StaticResource Aircraft}, Path=Pilot.Weight}" />

应用程序编译并运行,但是当我将数字文本放入文本框,然后将焦点移动到另一个文本框时,我希望看到 Pilot.Weightsetter > 被调用(我有一个断点)。它没有。

我相信应该有一个从 String(从文本框)到 int(Weight 属性的类型)的默认 ValueConverter,并且文本框应该有 LostFocus 的默认更新源事件。

我是否正确指定了绑定(bind)?
我需要创建一个 ValueConverter,还是明确指定更新事件?
还有什么我做错了吗?

最佳答案

您需要绑定(bind) Text 属性,而不仅仅是 DataContext,例如:

<TextBox Name="PICWeight" DataContext="{Binding Source={StaticResource Aircraft}}" Text="{Binding Path=Pilot.Weight}" />

或:

<TextBox Name="PICWeight" Text="{Binding Source={StaticResource Aircraft}, Path=Pilot.Weight}" />

关于c# - WPF 数据绑定(bind)的新手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742449/

相关文章:

wpf - 具有 D3DImage 共享资源的 DirectX11/DirectX10 多重采样 (MSAA)

c# - DataGridView 在通过单元测试调用时不接受 DataSource

c# - 绑定(bind) Listview 的 GridView 的 DataGridCell 的 TextBlock

c# - 从我的查询中获取值的语法问题

c# - 根据数字确定星期几

javascript - Controller Action 完成时隐藏 div

C# 覆盖方法

c# - WPF 工具提示放置目标返回 null

c# - 如何在不使用描边属性的情况下勾勒出椭圆形?

c# - 将未知(在设计时)属性添加到 ExpandoObject