2016-03-18 36 views
0

我想使用MetroEventToCommand庫來綁定一個事件。 http://metroeventtocommand.codeplex.com/MetroEventToCommand的CommandParameter不能與控件一起使用(Windows通用10)

它調用該方法,但它不提供控件作爲參數。據說它是空的。

這就是我所擁有的。

<ScrollViewer x:Name="test"> 
    <ListView/> 
    <metroEventToCommand:EventToCommandManager.Collection> 
      <metroEventToCommand:EventToCommand Command="{Binding RefreshCommand}" Event="ViewChanging" CommandParameter="{Binding ElementName=test, Mode=TwoWay}"/> 
    </metroEventToCommand:EventToCommandManager.Collection> 
    </ScrollViewer> 

    public RelayCommand<ScrollViewer> RefreshCommand { get; set; } 

    private void init() 
    { 
    RefreshCommand = new RelayCommand<ScrollViewer>(Refresh); 
    } 

    private void Refresh(ScrollViewer o) 
    { 
     if (o != null) 
     { 

     } 
    } 

在此先感謝。

+0

我會嘗試將RelayCommand更改爲RelayCommand ...應該讓它通過,您可以檢查實際發生的情況。空表示它不是通過任何東西,或者它不符合類型要求。充分披露,我之前沒有使用過metroEventToCommand。 –

+0

已經嘗試過,它沒有工作。 – denderp

回答

0

確定...不是一個答案,但我不能把代碼放在評論中。我使用MVVM Light製作了一個快速應用程序,並使用Interactivity庫代替了metroToEventCommand。

我可以從掛鉤的事件處理程序(當然),它傳遞

private void onViewChanging(object sender, ScrollViewerViewChangingEventArgs e) 
    { 
     vm.RefreshCommand.Execute(this.test); 
    } 

我也可以得到它使用Loaded事件或PointerEntered事件

<ScrollViewer x:Name="test" > 
      <Interactivity:Interaction.Behaviors> 
       <Core:EventTriggerBehavior EventName="PointerEntered"> 
        <Core:InvokeCommandAction Command="{Binding RefreshCommand, Mode=OneWay}" CommandParameter="{Binding ElementName=test}" /> 
       </Core:EventTriggerBehavior> 
      </Interactivity:Interaction.Behaviors> 
      <ListView x:Name="myList"/> 
     </ScrollViewer> 
來觸發命令和參數

但是,當試圖使用ViewChanging,ViewChanged時,Interactivity dll會拋出一個異常(無法將'Microsoft.Xaml.Interactions.Core.EventTriggerBehavior'類型的實例添加到'Microsoft.Xaml.Interactivity.BehaviorCollection'類型的集合中。) ,DirectManipulationComple特德等事件 - 是否使用參數。 ManipulationCompleted不會觸發命令(我已經看到提示命令不能綁定到路由事件)。

所以,這個概念似乎可行 - 但只適用於某些事件類型。我很抱歉,這不是您的挑戰的解決方案,但希望這是一些額外的信息來幫助您的嘗試。

相關問題