0

我有一个在 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 值。

任何想法?

4

1 回答 1

1

我看到了解决您问题的两种方法:
1)移入SelectBoardCommand内部BoardModel。它不需要参数,将单独对每个模型进行操作;2) 将属性
绑定到属性。在这种情况下,用户根本无法从 UI 调用。EnabledButtonNotUsedSelectBoardCommand

于 2017-09-22T23:22:26.030 回答