2017-09-22 86 views
0

我有一個運行在UWP中的Xamarin.Forms應用程序,我使用DLToolkit.Forms.Controls.FlowListView(從daniel-luberda)顯示某種帶按鈕的網格視圖。Xamarin.Forms ChangeCanExecute不使用正確的參數

使用的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是一個我在命令中獲得) 。 但是,當爲了禁用該命令而調用「CanChangeExecute」時,我無法將選定的板作爲參數傳遞。

,並在命令,使用

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

時,它調用的函數功能

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

與列表的最新項目。

此外,我需要在ChangeCanExecute中放置一個「board!= null」,因爲這個Func用空值調用了很多時間。

有什麼想法?

+0

你確定它不是FlowListView的問題嗎? – Andy

+0

@Andy剛剛測試過,並且出現同樣的問題 – hugoterelle

回答

1

我看到你的問題的兩種方式:
1)移動SelectBoardCommand裏面BoardModel。它不需要參數,並且可以單獨在每個模型上運行;
2)綁定Enabled財產ButtonNotUsed財產。在這種情況下,用戶將無法從UI調用SelectBoardCommand

+0

我無法在BoardModel中輸入命令,因爲在與ViewModel緊密結合的命令中有更多的代碼。 – hugoterelle

+0

我已經嘗試綁定到按鈕的Enabled屬性,但只要您使用Command綁定按鈕,Enabled就不再使用。 – hugoterelle

+1

如果我們記住,在技術上我們使用'ListView'和'ItemTappedCommand',該命令不應該'CanExecute'返回'false'。單元總是可以被點擊,但是在'command'實現中,我們把'if(board?.NotUsed){...}' – foxanna