[英]WPF Binding to textbox not updating
我正在寫一個WPF應用程序,我有一個文本框供用戶輸入視頻播放的每秒幀數值。 此文本框的值綁定到后面的代碼中的依賴項屬性(嘗試像一個優秀的設計師一樣遵循MVVM)。 我的問題是,當外部更改FPS值時,文本框不會自動更新。 例如,用戶可以使用滑塊控制值。 依賴屬性值由滑塊正確更改,但文本框文本永遠不會更新,當然,除非我手動使用GetBindingExpression(..)。UpdateTarget(),這是我已經實現的等待更好的解決方案。 有誰知道這是否是預期的功能還是我設置錯誤的東西?
謝謝,馬克斯
XAML中的TextBox標記:
<TextBox Text="{Binding FPS}" Name="tbFPS" FlowDirection="RightToLeft"/>
依賴屬性的代碼背后:
#region public dependency property int FPS
public static readonly DependencyProperty FPSProperty =
DependencyProperty.Register("FPSProperty", typeof(int), typeof(GlobalSettings),
new PropertyMetadata(MainWindow.appState.gSettings.fps,FPSChanged,FPSCoerce),
FPSValidate);
public int FPS
{
get { return (int)GetValue(FPSProperty); }
set { SetValue(FPSProperty, value); }
}
private static bool FPSValidate(object value)
{
return true;
}
private static object FPSCoerce(DependencyObject obj, object o)
{
return o;
}
private static void FPSChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
//why do i need to update the binding manually? isnt that the point of a binding?
//
(obj as GlobalSettings).tbFPS.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
}
#endregion
不確定這是否是問題,但你應該傳遞“FPS”作為屬性名稱,而不是“FPSProperty”,如下所示:
public static readonly DependencyProperty FPSProperty =
DependencyProperty.Register("FPS", typeof(int), typeof(GlobalSettings),
new PropertyMetadata(MainWindow.appState.gSettings.fps,FPSChanged,FPSCoerce),
FPSValidate);
我還認為您需要將FrameworkPropertyMetadataOptions.BindsToWayByDefault添加到依賴項屬性注冊,否則您需要手動設置TextBox.Text綁定到TwoWay的模式。
要使用FrameworkPropertyMetadataOptions,您需要在注冊中使用FrameworkPropertyMetaData而不是PropertyMetadata:
public static readonly DependencyProperty FPSProperty =
DependencyProperty.Register("FPS", typeof(int), typeof(GlobalSettings),
new FrameworkPropertyMetadata(MainWindow.appState.gSettings.fps, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, FPSChanged, FPSCoerce),
FPSValidate);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.