Xamarin.Forms ChangeCanExecute没有使用正确的参数

时间:2017-09-22 22:48:07

标签: c# xamarin xamarin.forms uwp freshmvvm

我有一个在UWP中运行的Xamarin.Forms应用程序,我使用DLToolkit.Forms.Controls.FlowListView(来自daniel-luberda)来显示某种带按钮的网格视图。

使用的Mvvm框架是FreshMvvm。

这是我在XAML中的gridview:

<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

我的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绑定到命令文本的是我在命令中获得的值)。 但是在调用&#34; CanChangeExecute&#34;为了禁用命令,我无法将选定的板作为参数传递。

在命令中,使用

((Command<BoardModel>) _selectBoardCommand).ChangeCanExecute();

它调用Func

board => board != null && board.NotUsed

列出最新项目。

此外,我需要放一个&#34; board!= null&#34;在ChangeCanExecute中,因为使用空值调用了很多时间。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我认为你的问题有两种解决方法:
1)在SelectBoardCommand内移动BoardModel。它不需要参数,可以单独对每个模型进行操作;
2)将Enabled的{​​{1}}属性绑定到Button属性。在这种情况下,用户将无法从用户界面调用NotUsed