2

我有一个具有依赖属性的 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(() =>
            {


            });

        }
    }

然后我在页面中绑定这样的两个属性,其中我将 viewModel 作为 DataContext 和 UserControl。

            <UserControls:Step Step3Command="{Binding SaveStep1Command, Mode=OneWay}" />

未应用绑定,并且 userControl 中的 Step3Command 始终显示为空。我知道 DataContext 工作正常,并且 Visual Studio 不允许我放置 TwoWay 绑定。我正在使用 GalaSoft Simple Mvvm 和 Visual Studio CTP update 2。

有人知道我在做什么错吗?谢谢。

4

2 回答 2

1

您定义了错误的属性。get每次访问属性时都会调用该块,因此每次您(或 WPF 中的 MVVM 魔术)访问时SaveStep1Command都会创建一个新命令。这不是你想要的。

像这样重写属性:

在您的构造函数代码中,编写:

SaveStep1Command = new RelayCommand(...)

并像这样定义您的属性:

public ICommand SaveStep1Command { get; }

如果您使用的是旧版本的 .net / C#,则必须像这样定义它:

public ICommand SaveStep1Command { get; private set; }

解释尝试:可能是数据绑定只创建了弱引用。使用您的定义方式,SaveStep1Command一旦绑定设置就创建它,然后它只是“躺在”堆上 - 当 GC 下次启动时,空间被释放,因为它没有强引用。

于 2018-05-17T10:38:26.967 回答
0

是的。问题是您没有处理 DP 的 Changed 事件。

参考这个:https ://blog.jerrynixon.com/2013/07/solved-two-way-binding-inside-user.html

于 2014-01-30T17:19:25.293 回答