C# 数据绑定(bind)不更新 WPF

标签 c# .net data-binding xaml code-behind

我正在尝试在后面的 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/

相关文章:

WPF 在绑定(bind)失败时应用触发器

c# - 如何使用 INotifyPropertyChanged 更新列表框项目

c# - 如何使用 TestServer 和 Antiforgery 修复 POST 集成测试的 500 Internal Server Error? ASP.NET核心

c# - 如何将代码拆分成组件......大类?小类?

c# - 从磁盘加载 WindowsFormsControlLibrary DLL,然后添加到控件,C#

c# - MessageBox.Show 从右到左阅读不起作用

c# - 将公共(public)属性用于内部和公共(public)使用还是分开使用?

.net - 如何在数据网格中使用自动完成功能?

.net - "Keyset does not exist"将 SignData 函数与 RSA 一起使用时

c# - 下拉列表值重复