我尝试在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);
这是在我的MainWindow中的InitializeComponent()之后。
有什么想法,为什么它只在启动时起作用?