在XAML中设置命令绑定时出现问题

时间:2011-06-13 13:56:58

标签: c# wpf xaml mvvm binding

我正在尝试为我的应用程序创建一个菜单栏。我在xaml中创建了一个集合,我将包含我的菜单将绑定的菜单项。

在xaml中,我创建了一个数组,用作绑定的静态资源。

<coll:ArrayList x:Key="MenuOptionsList">
        <model:DashboardMenuBarItem 
               Icon="the location of an image in my images folder" 
               DisplayName="The test that will appear under my button"  
               CommandName="someCommandInMyViewModel"/>
</coll:ArrayList>

我正在使用带有数据模板的列表框来显示以下项目。

<ListBox x:Name="lstNavigateTo" MinWidth="400" DockPanel.Dock="Top"
             ItemsSource="{Binding Source={StaticResource MenuOptionsList}}" 
             ScrollViewer.HorizontalScrollBarVisibility="Disabled"
             Style="{StaticResource horizontalListTemplate}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Margin="5">
                    <Button Height="60" Width="60"
                            Command="{Binding Mode=OneWay, Path=CommandName}">
                        <Button.Content>
                            <Image Source="{Binding Path=Icon}" Grid.Row="0" />
                        </Button.Content>
                    </Button>
                    <TextBlock Text="{Binding Path=DisplayName}" 
                               Width="100" TextAlignment="Center" Grid.Row="1" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>

我的问题是我正在使用MVVM设计模式,并且无法使命令绑定在按钮单击上起作用。以前我会像这样管理按钮点击。

Command="{Binding someCommandInMyViewModel}"

这样可以正常工作但是当我尝试将命令绑定到我的集合中的项目的属性时,命令将不会触发。

有谁知道如何实现这一目标。

1 个答案:

答案 0 :(得分:2)

集合中的CommandName属性属于String,而Command上的Button属性属于ICommand。您期望WPF以何种方式解析ICommand中的String?您需要提供帮助:要么创建转换器并在绑定中使用它,要么更改CommandName属性,使其包含实际的ICommand而不是String