我正在尝试在后面的 C# 代码而不是 XAML 中执行数据绑定(bind)。在 Expression Blend 2 中创建的 XAML 绑定(bind)到我的 CLR 对象工作正常。我的 C# 实现仅在应用程序启动时更新,之后对 CLR 的后续更改不会更新我的标签内容。
这是有效的 XAML 绑定(bind)。 首先在我的 Window.Resources 中创建一个 ObjectDataProvider。
<ObjectDataProvider x:Key="PhoneServiceDS"
ObjectType="{x:Type kudu:PhoneService}" d:IsDataSource="True"/>
和标签内容绑定(bind):
<Label x:Name="DisplayName" Content="{Binding
Path=MyAccountService.Accounts[0].DisplayName, Mode=OneWay,
Source={StaticResource PhoneServiceDS}}"/>
效果很好。但我们希望在 C# 中进行此设置,以便我们可以独立更改 XAML(即新外观)。我曾经按如下方式使用 C#:
Binding displayNameBinding = new Binding();
displayNameBinding.Source =
PhoneService.MyAccountService.Accounts[0].DisplayName;
displayNameBinding.Mode = BindingMode.OneWay;
this.DisplayName.SetBinding(Label.ContentProperty, displayNameBinding);
这是在 InitializeComponent() 之后在我的 MainWindow 中;
知道为什么这只适用于启动吗?
最佳答案
您的 C# 版本与 XAML 版本不匹配。应该可以编写标记的代码版本,但我不熟悉 ObjectDataProvider。
尝试这样的事情:
Binding displayNameBinding = new Binding( "MyAccountService.Accounts[0].DisplayName" );
displayNameBinding.Source = new ObjectDataProvider { ObjectType = typeof(PhoneService), IsDataSource = true };
displayNameBinding.Mode = BindingMode.OneWay;
this.DisplayName.SetBinding(Label.ContentProperty, displayNameBinding);
关于C# 数据绑定(bind)不更新 WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/357033/