我有一些UI元素在代碼中執行一些特定於UI的工作,然後更新數據上下文中的綁定。在WPF中使用BindingExpression的最佳做法?
WPF元素:
<TextBox Grid.Row="1"
Text="{Binding PartNumber, UpdateSourceTrigger=Explicit}"
Name="ui_partNumber"
FontSize="35"
VerticalContentAlignment="Center" />
<Button Grid.Column="1"
Grid.Row="1"
Content="OK"
Click="PartOKClick"
FontSize="20"
Width="150" />
後面的代碼:
/// <summary>
/// Handle updating the view model with the part number
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PartOKClick(object sender, RoutedEventArgs e) {
//Get the textbox's binding expression
BindingExpression be = ui_partNumber.GetBindingExpression(TextBox.TextProperty);
if (Condition) {
//Update part number binding
be.UpdateSource();
//Animate to next state
InAnimate(ui_partGrid.Name);
OutAnimate(ui_whichPartNumber.Name);
}
else {
//Discard the text in the textbox
be.UpdateTarget();
//Animate to notification state
InAnimate(ui_invalidLocation.Name);
}
}
在我的ViewModel屬性看起來像:
public string PartNumber{
get { return _partNumber; }
set { _partNumber = value; OnPropertyChanged("PartNumber"); }
}
我使用顯式綁定,只有更新源如果檢查出來,否則我只是恢復到原始綁定。
問題是,這是明確使用綁定的最佳方式嗎?如果我得到不同類型的100個元素的BindingExpression,那麼我是否需要每次都手動完成它?我能以更加可重用的方式做到嗎?
你有你的懸而未決的問題的解決方案?也許一個'Explicit'選項用於網格而不是所有控件,併爲所有有界控件調用一次'UpdateSource'。只需「取消」按鈕 – Hamid