在我的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()));
答案 0 :(得分:2)
根据此msdn
除了特殊情况外,你的包装实现 应分别仅执行GetValue和SetValue操作。 其原因在XAML Loading和主题中讨论 依赖属性。
您应该在依赖属性的定义中使用PropertyChangedCallBack。以下是直接取自msdn。
的代码public static readonly DependencyProperty AquariumGraphicProperty = DependencyProperty.Register(
"AquariumGraphic",
typeof(Uri),
typeof(AquariumObject),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.AffectsRender,
new PropertyChangedCallback(OnUriChanged)
)
);
定义 CalculateDay 代替上面的 OnUriChanged 。
答案 1 :(得分:0)
我没有看到您在代码中使用DependencyProperty
的原因。在MainViewModel
中,您拥有所需的一切。
在代码后面只添加到构造函数:
this.DataContext = new MainViewModel();
接下来,将CalculateDay
方法移至MainViewModel
并以SelectedDay