[英]C# data binding doesn't update WPF
我正在嘗試在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);
在priginal代碼中,你混淆了源和路徑。
Binding displayNameBinding = new Binding();
displayNameBinding.Source = PhoneService;
displayNameBinding.Path = "MyAccountService.Accounts[0].DisplayName";
displayNameBinding.Mode = BindingMode.OneWay;
this.DisplayName.SetBinding(Label.ContentProperty, displayNameBinding);
(我假設PhoneService是一個對象實例,否則可能是PhoneService.MyAccountService.Accounts [0]應該是Source?)
從內存中,您可以將路徑作為參數傳遞給構造函數。
將此內容寫入Loaded事件而不是Constructor。 希望您在DisplayName屬性setter上觸發INotifyPropertyChanged?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.