前言 之前想用Markdown來寫框架文檔,找來找去發現還是Jekyll的多,但又感覺不是很合我的需求 於是打算自己簡單弄一個展示Markdown文檔的網站工具,要支持多版本、多語言、導航、頁內導航等,並且支持Github Pages免費站點 組件選擇 我自己呢比較喜歡C#,恰好現在ASP.Net ...
問題描述
在下麵這段代碼中,我們給控制項的某個屬性設置了單向綁定,然後在代碼的某處給這個屬性顯式地賦了值,結果會導致我們在這之前設置的綁定永久失效。
//外部給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);
}
}