我正在使用带有 Prism 的 MVVM 模式
我的模型中有一个 ObservableCollection 中的元素列表。在我的视图中,我将 ObservableCollection 绑定到 Listview,然后尝试显示 1 个绑定到名为 DoSomethingCommand 的 DelegateCommand 的按钮。这意味着我的 Listview 的每一行都有一个用于调用 DoSomethingCommand 的按钮,其中一个 CommandParameter 绑定到元素的 ID。
约束:DoSomethingCommand 会将我的元素的状态字段更改为“完成”。当一个元素“完成”时,我希望禁用调用 DoSomethingCommand 的按钮。
所以从逻辑上讲,我所要做的就是在执行命令时拥有一个 canExecuteDoSomethingCommand 委托。但是,问题是我何时以及如何提高 DoSomethingCommand.RaiseCanExecuteChanged?BTW Element 是我无法修改的第三方 dll 的一部分,但它已经实现了 INotifyPropertyChanged。
<ListView BorderThickness="0" Width="Auto"
ItemsSource="{Binding ElementList}"
>
<ListView.View>
<GridView>
<GridViewColumn Header="Actions">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Command="{Binding DataContext.DoSomethingCommand, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}" CommandParameter="{Binding ID}" >Accept</Button>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
执行命令
DoSomethingCommand = new DelegateCommand<string>(executeDoSomethingCommand, canExecuteDoSomethingCommand);