RelayCommand未执行

3

我正在尝试使用来自Galasoft MVVMLight的RelayCommand执行我的CodeBehind中的RelayCommand。

MainPage.xaml.cs

public MainPage()
{
    InitializeComponent();
    DataContext = this;
    MyCommand = new RelayCommand(Methode);
}

#region Commands
public RelayCommand MyCommand { get; private set; }
#endregion

private void Methode()
{
    int i = 1;        
}

MainPage.xaml:

<Button Command="{Binding MyCommand}"/>

很遗憾,命令没有触发/方法没有被调用。其他绑定的元素比如ImageSource都可以正常工作。
1个回答

9
在设置DataContext之前创建新的RelayCommand。设置DataContext会触发数据绑定引擎更新绑定。由于MyCommand属性尚未设置,ButtonCommand将为null。在设置DataContext后创建新的RelayCommand不会通知Button属性已更新。在设置DataContext之前创建Command是一种解决方案,另一种解决方案是实现INotifyPropertyChanged接口,并在设置MyCommand后触发PropertyChanged事件(或在setter中要求使用支持字段)。

工作中,谢谢...没想到这么简单。我还以为在开始或结束设置DataContext不会有任何区别。 - undefined
1
在这种情况下,这是有区别的,因为设置数据上下文会触发绑定的更新。命令绑定会找到你的命令属性,但它还没有被设置。在设置数据上下文之后,设置命令属性不会通知按钮它已经改变了,所以按钮不会知道。 - undefined
没问题,本来我在答案中就应该这样做,我会更新的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接