的我試圖做好後續數據綁定鏈數據綁定
Property -> DependencyProperty -> Property
但我有麻煩了。 例如, 我們已經有兩個屬性的簡單類實現INotifyPropertyChanged:
<TextBlock Name="tb" FontSize="20" Foreground="Red" Text="qwerqwerwqer" />
現在讓我們試圖NUM1結合tb.Text:
public class MyClass : INotifyPropertyChanged
{
private string _num1;
public string Num1
{
get { return _num1; }
set
{
_num1 = value;
OnPropertyChanged("Num1");
}
}
private string _num2;
public string Num2
{
get { return _num2; }
set
{
_num2 = value;
OnPropertyChanged("Num2");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(e));
}
}
而TextBlock的在XAML中宣佈
private MyClass _myClass = new MyClass();
public MainWindow()
{
InitializeComponent();
Binding binding1 = new Binding("Num1")
{
Source = _myClass,
Mode = BindingMode.OneWay
};
Binding binding2 = new Binding("Num2")
{
Source = _myClass,
Mode = BindingMode.TwoWay
};
tb.SetBinding(TextBlock.TextProperty, binding1);
//tb.SetBinding(TextBlock.TextProperty, binding2);
var timer = new Timer(500) {Enabled = true,};
timer.Elapsed += (sender, args) => _myClass.Num1 += "a";
timer.Start();
}
它運作良好。但是,如果我們取消註釋該字符串
tb.SetBinding(TextBlock.TextProperty, binding2);
然後TextBlock什麼都不顯示。 DataBinding不起作用!我該如何做我想做的事?
哇!老兄,我真的很喜歡你的答案!但我忘了提到,實際上我的屬性位於繼承自WinForms控件的類中,這就是爲什麼我不能使用依賴屬性:( )您的解決方案對於被問及的問題非常有用,遺憾的是我無法將其應用於我的真實任務 – Neir0 2010-05-04 00:47:16
這是一個很糟糕的方法,它表明你可能需要重新思考你真正想要完成什麼,這個解決方案的本質是使用UI來控制兩個非UI對象之間的關係屬性,最終如何在UI中完成而不是在代碼中? – 2010-05-04 03:44:23
那麼你可以在該場景中使用綁定模式「OneWayToSource」,但是你仍然需要在兩個不同的對象上設置綁定 - 你但是請記住,設置第二個綁定會清除已經設置的綁定,因此您需要重新定位您的一些屬性。 – Charlie 2010-05-04 14:40:22