Xamarin.Forms ChangeCanExecute 没有使用正确的参数
Xamarin.Forms ChangeCanExecute not using the right parameters
我在 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();
它调用 Func
board => board != null && board.NotUsed
使用列表中的最新项。
此外,我需要在 ChangeCanExecute 中放置一个 "board != null",因为这个 Func 被调用很多时候都是空值。
有什么想法吗?
我看到有两种方法可以解决您的问题:
1) 将 SelectBoardCommand
移到 BoardModel
内。它不需要参数,将单独对每个模型进行操作;
2) 将 Button
的 Enabled
属性 绑定到 NotUsed
属性。在这种情况下,用户根本无法从 UI 调用 SelectBoardCommand
。
我在 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();
它调用 Func
board => board != null && board.NotUsed
使用列表中的最新项。
此外,我需要在 ChangeCanExecute 中放置一个 "board != null",因为这个 Func 被调用很多时候都是空值。
有什么想法吗?
我看到有两种方法可以解决您的问题:
1) 将 SelectBoardCommand
移到 BoardModel
内。它不需要参数,将单独对每个模型进行操作;
2) 将 Button
的 Enabled
属性 绑定到 NotUsed
属性。在这种情况下,用户根本无法从 UI 调用 SelectBoardCommand
。