2011-05-03 205 views
1

執行與參數命令目前我有在XAML:使用XAML綁定和視圖模型

<ItemsControl ItemsSource="{Binding Facilities, Mode=OneWay}"> 
<ItemsControl.ItemTemplate> 
    <DataTemplate> 
    <Border Style="{StaticResource BorderStyleHeader}"> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="33" /> 
     <RowDefinition Height="33" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="150" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <TextBlock Text="{Binding Name}" HorizontalAlignment="Center" Grid.Row="0" Grid.Column="1" FontWeight="Bold" /> 
    <TextBlock Text="{Binding Description}" Grid.Row="1" Grid.Column="1" /> 
    <Button Content="Reserveer Nu" Style="{StaticResource ButtonStyle}" 
      Margin="5" Grid.Row="1" Grid.Column="0" 
      Command="{Binding Reservation.ItemClicked}" 
      CommandParameter="{Binding FacilityId}"/> 
    </Grid> 
    </Border> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 
</ItemsControl> 

現在的第一件事是,我希望該按鈕在我的視圖模型引發事件

public RelayCommand ItemClicked 
{ 
    get 
    { 
     return new RelayCommand(() => 
     { 
      MessageBox.Show("Something is clicked"); 
     }); 
    } 
} 

但它拒絕...
其次,我想能夠提高事件的參數(注意commandparameter),但我從來沒有使用它,因此我不明白如何使用它。

所以我的問題:

  1. 爲什麼沒有執行我的relaycommand?

  2. 如何使用命令參數?

+1

「但它拒絕」:這是什麼意思?你是否收到編譯錯誤?例外?你在輸出窗口中看到綁定錯誤嗎?您無法通過您提供的信息回答您的問題 – 2011-05-03 09:20:18

+1

您正在使用哪種RelayCommand實施?這不是一個標準的類,有多個實現 – 2011-05-03 09:22:30

+0

使用來自MVVM Light(GalaSoft)的RelayCommand – 2011-05-03 10:11:54

回答

4

爲什麼我relaycommand執行?
如何使用命令參數?

如果您使用從Josh Smith's articleRelayCommand類,這兩個問題都有相同的答案...構造函數採用Action<object>,不是Action。所以,你的代碼應該是:

return new RelayCommand((param) => 
    { 
     MessageBox.Show("Something is clicked - Parameter value = " + param); 
    }); 

編輯:好的,讓你在使用從MVVM點燃RelayCommand ......有此類的兩個版本,一個是通用的,一個不是。非通用版本不接受參數,因此您需要通用版本。你的命令應該是這樣的:

public RelayCommand<int> ItemClicked 
{ 
    get 
    { 
     return new RelayCommand<int>((i) => 
     { 
      MessageBox.Show("Something is clicked - Parameter value is " + i); 
     }); 
    } 
} 

(假設參數是int型)

至於爲什麼你當前的代碼不工作,我不能沒有更多的信息回答...

+0

你有一個錯字」你是你「,我想你的意思是說」如果你是「,不知道,所以我給你編輯;) – jv42 2011-05-03 09:27:40

+0

@ jv42,謝謝,修正 – 2011-05-03 09:29:34

+0

今天嘗試過,它仍然不起作用,它永遠達不到我在MessageBox上設置的斷點 – 2011-05-04 11:04:43