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