将按钮动态绑定到列表

时间:2015-02-17 15:20:30

标签: c# .net wpf

我有一个mvvm应用程序和一个显示按钮的表单。 xaml表单上的每个按钮都需要绑定到相应的列表项。例如。在列表中我们可以有:物品(物品(1,梅赛德斯),物品(3,宝马)等)。当表单打开时,我需要显示列表中存在的那些按钮。列表在表单开始时动态填充。以下是按钮的示例:

<Button Command="{Binding Path=ChooseCommand}" CommandParameter="{x:Static local:Car.Merecdes}" >
    <Button.Content>
        <StackPanel Orientation="Vertical" Width="165" Height="125">
            <Image x:Name="PathIcon1" Width="50" Height="35" Source="/Resources/Images/Mercedes.png" Stretch="Fill"></Image>
            <TextBlock Text="Mercedes" HorizontalAlignment="Left" Margin="5,20,0,0" />
        </StackPanel>
     </Button.Content>
</Button>

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

您需要使用ItemsControl(例如ListBox)来显示项目,并使用DataTemplate来定义每个项目的外观。也许是这样的:

在资源中:

<DataTemplate>
    <Button Command="{Binding Path=ChooseCommand}" CommandParameter="{Binding Param}">
        <Button.Content>
            <StackPanel Orientation="Vertical" Width="165" Height="125">
                <Image x:Name="PathIcon1" Width="50" Height="35" 
                    Source="{Binding ButtonImageSource}" Stretch="Fill"></Image>
                <TextBlock Text="{Binding ButtonText}" HorizontalAlignment="Left" 
                    Margin="5,20,0,0" />
            </StackPanel>
        </Button.Content>
    </Button>
</DataTemplate>

在XAML中:

<ListBox ItemsSource="{Binding YourItemCollection}" .../>

请注意,为此,您需要在商品类中添加ButtonText属性和string ButtonImageSource属性。有关数据绑定的详细信息,请参阅MSDN上的Data Templating Overview页面。