簡體   English   中英

WPF綁定不適用於UserControl

[英]WPF binding does not work with a UserControl

在我的MainViewModel我有一個屬性,由用戶設置。 收到新值后,我想在UserControl上更新信息。 問題是綁定不起作用。 我希望它的工作方式如下。 SelectedDay更改后,后面的用戶控件代碼中的Day屬性也會更改,從而調用CalculateDay方法。 但是,這種方法永遠不會被調用!

我想,原因很簡單,我只是不完全理解綁定機制,但我無法弄清楚出了什么問題,現在我真的需要一些幫助。 我已經檢查了一些類似的問題,但從未找到合適的答案。

我的代碼:

MainViewModel

private Day _selectedDay;
public Day SelectedDay
{
    get { return _selectedDay; }
    set
    {
        _selectedDay = value;
        RaisePropertyChanged("SelectedDay");
    }
}

MainWindow XAML

<controls:DayControl Day="{Binding SelectedDay, Mode=TwoWay}"></controls:DayControl>

UserCotrol代碼背后

public Day Day
{
    get { return (Day)GetValue(DayProperty); }
    set
    {
        SetValue(DayProperty, value);
        CalculateDay();
    }
}

public static readonly DependencyProperty DayProperty =
    DependencyProperty.Register("Day", typeof(Day), typeof(DayControl), new PropertyMetadata(new Day()));

根據這個msdn

在所有特殊情況下,您的包裝器實現應分別僅執行GetValue和SetValue操作。 在XAML加載和依賴屬性主題中討論了其原因。

您應該在依賴屬性的定義中使用PropertyChangedCallBack。 以下是直接取自msdn的代碼。

public static readonly DependencyProperty AquariumGraphicProperty = DependencyProperty.Register(
  "AquariumGraphic",
  typeof(Uri),
  typeof(AquariumObject),
  new FrameworkPropertyMetadata(null,
      FrameworkPropertyMetadataOptions.AffectsRender, 
      new PropertyChangedCallback(OnUriChanged)
  )
);

定義您的CalculateDay代替上面的OnUriChanged

我沒有看到你在代碼中使用DependencyProperty的原因。 您擁有MainViewModel所需的一切。

在代碼后面只添加到構造函數:

this.DataContext = new MainViewModel(); 

接下來,將CalculateDay方法移動到MainViewModel並在SelectedDay set方法中調用它

暫無
暫無

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

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