簡體   English   中英

WPF綁定到文本框不更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM