我正在尝试在后面的 C# 代码而不是 XAML 中进行数据绑定。在 Expression Blend 2 中创建的 XAML 绑定到我的 CLR 对象工作正常。我的 C# 实现仅在应用程序启动时更新,之后对 CLR 的后续更改不会更新我的标签内容。
这是有效的 XAML 绑定。
首先,在我的 Window.Resources 中创建一个 ObjectDataProvider。
<ObjectDataProvider x:Key="PhoneServiceDS"
ObjectType="{x:Type kudu:PhoneService}" d:IsDataSource="True"/>
以及标签内容绑定:
<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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)