我正在尝试将CommandParameter绑定到DataGrid的SelectedItem属性。 实际上,该方法在Window调用时只调用一次。
这就是我通常使用的Silverlight 5,它运行得非常好。
<Button Command="{Binding DeleteProductCommand}" CommandParameter="{Binding ElementName=ProductDataGrid, Path=SelectedItem}"/>
...
<sdk:DataGrid x:Name="ProductDataGrid" AutoGenerateColumns="False" IsReadOnly="True" ItemsSource="{Binding ProductsCollection}">
...
我在下面的post中读到了SL和WPF之间处理命令的方式。这实际上是4岁。所以我只是想知道微软是否发布了这个问题的更新。
为了解决这个问题,我必须在我的命令中添加一个名为RaiseCanExecuteChanged的自定义方法来触发CanExecuteChanged事件。 然后我在ViewModel中添加了一个属性。我从set访问器调用RaiseCanExecuteChanged方法。 然后我在ViewModel中实现了INotifyPropertyChanged接口,以在SelectedProduct属性更改时警告UI。
class MainVM : INotifyPropertyChanged
{
private Product _SelectedProduct;
public Product SelectedProduct
{
get
{
return this._SelectedProduct;
}
set
{
this._SelectedProduct = value;
this._PropertyChanged();
this.DeleteProductCommand.RaiseCanExecuteChanged();
}
}
private void _PropertyChanged([CallerMemberNameAttribute] string PropertyName = "")
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
...
}
XAML
<Button Command="{Binding DeleteProductCommand}" CommandParameter="{Binding SelectedProduct"/>
...
<sdk:DataGrid x:Name="ProductDataGrid" AutoGenerateColumns="False" IsReadOnly="True" ItemsSource="{Binding ProductsCollection}" SelectedItem="{Binding SelectedProduct}">
我想知道是否有更好的解决方案。 实际上我从前面提到的帖子中尝试了解决方案但是我对UI有轻微的滞后,因为它刷新了Window的所有绑定。
非常感谢任何帮助!