簡體   English   中英

WPF:MvvmLight,用戶控件,綁定

[英]WPF : MvvmLight, Usercontrol, Binding

我有一個簡單的用戶控件(DoubleRadioControl2),由2個單選按鈕組成。 我在這個UC上有一個Dep Prop:(bool?)IsOuiChecked:

  • 正確-選中“是”無線電
  • 否-選中“否”無線電
  • null-兩個無線電均未選中

很簡單

private static readonly DependencyProperty IsOuiCheckedProperty = DependencyProperty.Register("IsOuiChecked", typeof(bool?), typeof(DoubleRadioControl2), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

public bool? IsOuiChecked
{
    get
    {
        return (bool)GetValue(IsOuiCheckedProperty);
    }
    set
    {
        SetValue(IsOuiCheckedProperty, value);
        if (value == null)
        {
            RadioYes.IsChecked = false;
            RadioNo.IsChecked = false;
        }
        else
        {
            RadioYes.IsChecked = (bool) value;
            RadioNo.IsChecked = !(bool) value;
        }
    }
}

和這兩個收音機之間的邏輯:

private void OptDecompteConfnOui_Click(object sender, RoutedEventArgs e)
    {
        IsOuiChecked = true;
    }

private void OptDecompteConfnNon_Click(object sender, RoutedEventArgs e)
    {
        IsOuiChecked = false;
    }

當我將此UC綁定到我的視圖模型時,如果在單擊收音機時更新了道具,則該道具也會綁定。 但是,當我在視圖模型的代碼中設置值時,它不會更新我的收音機。

在我的視圖模型中:

    private bool? _isDRB2OuiChecked;
    public bool? IsDRB2OuiChecked
    {
        get
        {
            return _isDRB2OuiChecked;
        }

        set
        {
            if (_isDRB2OuiChecked == value)
            {
                return;
            }
            _isDRB2OuiChecked = value;
            RaisePropertyChanged(() => IsDRB2OuiChecked);
        }
    }

TwoWay綁定不起作用。

為您的依賴項屬性的getter和setter方法只存在於 (程序員)的便利。 WPF本身不會調用它們,而是直接設置屬性。

您需要將處理程序附加到屬性的已更改事件。 使用FrameworkPropertyMetadata構造函數之一,該構造函數采用PropertyChangedCallback 您的getter和setter邏輯需要在此處而不是在屬性內進行處理。

如果您使用的是MVVM,則應致電OnPropertyChanged

首先,這是一種非常糟糕的做法,將代碼放入依賴項屬性的Get / Set部分中,查看這些示例以獲取解決方案。 如果對DP更改有邏輯,則必須將該登錄名放在回調中。

  1. 依賴屬性說明在這里
  2. 這里的 MSDN概述。

如果在View / Viewmodel級別定義了綁定,則必須在Viewmodel端使用INotifyPropertyChange事件來通知View綁定屬性已更改。

問候,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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