2011-05-03 71 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