問題描述
在下面這段代碼中,我們給控制元件的某個屬性設定了單向系結,然后在代碼的某處給這個屬性顯式地賦了值,結果會導致我們在這之前設定的系結永久失效,
//外部給Text屬性設定系結
<TextBox Text="{Binding Name, Mode=OneWay}" />
//控制元件內部代碼
private void ClearButton_Click(object sender, RoutedEventArgs e)
{
base.Text = string.Empty;
}
解決方案1
最簡單的解決方式是將系結改為雙向的,那么給任何一方顯式地賦值都不會使系結失效
<TextBox Text="{Binding Name, Mode=TwoWay}" />
解決方案2
如果不想更改系結方式,那么可以在賦值前保存之前的系結,在賦值后設定回去,這種方式驗證過,也是可行的,不過感覺代碼不太優雅,當出現這種情況時,或許可以思考從設計層面去規避掉,
private void ClearButton_Click(object sender, RoutedEventArgs e)
{
var bindingExpression = this.GetBindingExpression(TextProperty);
Binding binding = bindingExpression?.ParentBinding;
base.Text = string.Empty;
if (binding != null)
{
this.SetBinding(TextBox.TextProperty, binding);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/529775.html
標籤:.NET技术
