我有一个在 UWP 中运行的 Xamarin.Forms 应用程序,我使用 DLToolkit.Forms.Controls.FlowListView (来自daniel-luberda)显示某种带有按钮的网格视图。
使用的 Mvvm 框架是 FreshMvvm。
这是我在 XAML 中的网格视图:
<c:FlowListView SeparatorVisibility="None"
HasUnevenRows="False" FlowColumnMinWidth="100"
FlowItemsSource="{Binding Boards}">
<c:FlowListView.FlowColumnTemplate>
<DataTemplate>
<Button Text="{Binding Number}"
Command="{Binding Path=BindingContext.SelectBoardCommand, Source={x:Reference Name=SalesPage}}"
CommandParameter="{Binding .}" />
</DataTemplate>
</c:FlowListView.FlowColumnTemplate>
</c:FlowListView>
这是结果(我简化了有关颜色和大小的 XAML):
我的 gridview 中的按钮绑定到带有参数的命令。每次单击按钮时,我都想禁用它。
我的命令如下所示:
private ICommand _selectBoardCommand;
[DoNotNotify]
public ICommand SelectBoardCommand => _selectBoardCommand = new Command<BoardModel>(board =>
{
board.NotUsed = false;
((Command<BoardModel>) _selectBoardCommand).ChangeCanExecute();
}, board => board != null && board.NotUsed);
按下按钮调用具有正确参数的命令(绑定到命令文本的 board.Number 是我在命令中得到的那个)。但是当调用“CanChangeExecute”以禁用命令时,我无法将选定的板作为参数传递。
而在命令中,使用时
((Command<BoardModel>) _selectBoardCommand).ChangeCanExecute();
它调用函数
board => board != null && board.NotUsed
与列表的最新项目。
此外,我需要在 ChangeCanExecute 中放置一个“board != null”,因为这个 Func 经常被调用为 null 值。
任何想法?