2014-04-28 46 views
0

我無法通過XAML將參數傳遞給操作方法。WPF將CommandParameter傳遞給動作方法RelayCommand

這是我的XAML

<Button 
     Name="btnOK" 
     Content="OK" 
     HorizontalAlignment="left" 
     Margin="961,253,0,0" 
     VerticalAlignment="Top" 
     Width="67" 
     Command="{Binding CmdCloseWindow, Mode=OneWay}" 
     CommandParameter="{Binding ElementName=ItemWindow}" 

這裏是我的C#RelayCommand代碼

 CmdGetProductItem = new RelayCommand<object>(p => GetProductItem(), p => CanExecute()); 
     CmdUnCommpressedFiles = new RelayCommand<object>(p => GetUnCommpressFiles(), p => CanExecute()); 
     CmdDeCommpressedFiles = new RelayCommand<object>(p => DeCommpressingFiles(), p => CanExecute()); 
     //CmdSaveProductItemChanges = new RelayCommand(t => SaveChanges(), t=> CanExecute()); 

     //Error is here 
     CmdCloseWindow = new RelayCommand<Window>(p => CloseWindow(*** Asking to put parameter in here ****), p => CanExecute()); 

但我正在逐漸從XAML參數,所以我不能把任何東西在上面簽名,其他職位狀態把它留空,但編者抱怨。

這是RelayCommand調用的方法。

private void CloseWindow(Window window) 
    { 
     if (window != null) 
     { 
      window.Close(); 
     } 
    } 

任何幫助,我將不勝感激。

+0

p是ItemWindow所以爲什麼要加入到簽名p => CloseWindow(p)傾斜? – SWilko

+0

我不知道關於Lambda ..感謝您的知識!但是,它現在抱怨超載錯誤,所以我猜p typent窗口? – user3428422

+0

取決於你的錯誤。放一個斷點來看看,讓我們知道如果仍然不工作 – SWilko

回答

0

感謝您@dellywheel指着我在正確的方向

基本上,拉姆達爲relaycommand - 所以在我的情況(p)是類型的對象,因此,將其轉換爲一個窗口對象(參數傳遞中),和類型,將工作

CmdCloseWindow = new RelayCommand<Window>(p => CloseWindow((Window) p), p => CanExecute()); 

乾杯

相關問題