我有一个带有依赖属性的UserControl:
public static readonly DependencyProperty Step2CommandProperty =
DependencyProperty.Register("Step2Command", typeof(ICommand), typeof(MyTripNavigationStep), new PropertyMetadata(null));
public ICommand Step3Command
{
get { return (ICommand)GetValue(Step3CommandProperty); }
set { SetValue(Step3CommandProperty, value); }
}
然后我有一个带有ICommand属性的ViewModel:
public ICommand SaveStep1Command
{
get
{
return new RelayCommand(() =>
{
});
}
}
然后我在Page中绑定了两个这样的属性,其中我将viewModel作为DataContext和UserControl。
<UserControls:Step Step3Command="{Binding SaveStep1Command, Mode=OneWay}" />
未应用绑定,userControl中的Step3Command始终显示为null。 我知道DataContext工作正常,并且Visual Studio不允许我放置TwoWay绑定。我正在使用GalaSoft Simple Mvvm和Visual Studio CTP update 2.
任何人都知道我做错了什么?感谢。
答案 0 :(得分:1)
您定义了属性错误。每次访问属性时都会调用get
块,因此每当您(或WPF中的MVVM魔法)访问SaveStep1Command
时,都会创建一个新命令。这不是你想要的。
像这样重写属性:
在构造函数代码中,写:
SaveStep1Command = new RelayCommand(...)
并按照以下方式定义您的属性:
public ICommand SaveStep1Command { get; }
如果您使用的是旧版本的.net / C#,则必须按如下方式定义:
public ICommand SaveStep1Command { get; private set; }
解释尝试:可能是数据绑定仅创建弱引用。通过定义SaveStep1Command
的方式,一旦设置了绑定,就会创建它,然后它就会出现在#34;在堆上 - 当GC下次启动时,空间被释放,因为它没有强引用。
答案 1 :(得分:0)
是。问题是您没有处理DP的Changed事件。
参考:https://blog.jerrynixon.com/2013/07/solved-two-way-binding-inside-user.html