0

在我的MainViewModel我有一个属性,它是由用户设置的。收到新值时,我想在我的UserControl. 问题是绑定不起作用。我希望它的工作方式如下。SelectedDay更改后,Day后面的用户控件代码中的属性也会更改,从而调用CalculateDay方法。但是,永远不会调用此方法!

我想,原因很简单,我只是不完全了解绑定机制,但我无法弄清楚出了什么问题,现在我真的需要一些帮助。我已经检查了许多类似的问题,但从未找到合适的答案。

我的代码:

主视图模型

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

主窗口 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()));
4

2 回答 2

2

根据这个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

于 2013-05-19T17:18:39.667 回答
0

DependencyProperty我看不出你在后面的代码中使用的原因。你有你需要的一切MainViewModel

在后面的代码中只需添加到构造函数:

this.DataContext = new MainViewModel(); 

接下来,将CalculateDay方法移动到MainViewModel并在 set 方法中调用它SelectedDay

于 2013-05-19T19:28:10.087 回答