silverlight组合框模板绑定

时间:2013-02-15 07:39:05

标签: silverlight combobox

我正在尝试从静态资源绑定组合框(在代码后面添加)并在每个项目旁边添加图像。我到目前为止的最佳解决方案如下:

            <ComboBox x:Name="cmbGroup"
          Width="150" Height="32" ItemsSource="{StaticResource Groups}" >

                <ComboBox.ItemTemplate>

                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>
                            <Image Source="Question.jpg" Height="30" MouseEnter="Image_MouseEnter" ></Image>
                            <ComboBoxItem Content="{Binding Source={StaticResource Groups}}" Grid.Column="1"/>

                        </Grid>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>

这不起作用,虽然我可以看到每个项目上的图像,但是文本,我得到了一个“Systems.Collection.GenericList”。任何想法如何解决这个问题?感谢

2 个答案:

答案 0 :(得分:0)

我猜你的“群组”是一个列表?

因此,您将模板配置为显示图像,默认情况下配置对象组。 因此它显示您的组对象:即组的toString(),对于List,为“Systems.Collection.GenericList”。

我的猜测是你绑定了坏事?您希望绑定列表中的项目,该项目应该具有更合适的toString()版本。

假设您的群组列表中有一些用户项目。因此,您的绑定应如下所示:

  <ComboBox x:Name="cmbGroup"
          Width="150" Height="32" ItemsSource="{StaticResource Groups}" >

                <ComboBox.ItemTemplate>

                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>
                            <Image Source="Question.jpg" Height="30" MouseEnter="Image_MouseEnter" ></Image>
                            <ComboBoxItem Content="{Binding Source={StaticResource Users}}" Grid.Column="1"/>

                        </Grid>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>

希望有所帮助

答案 1 :(得分:0)

当您在datatemplate中使用Binding控件时,它将绑定到ItemsSource集合中的每个项目。此外,如果您只想显示字符串,可以使用TextBlock控件而不是ComboboxItem。所以,如果您的代码如下:             

            <ComboBox.ItemTemplate>

                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <Image Source="Question.jpg" Height="30" MouseEnter="Image_MouseEnter" ></Image>
                        <TextBlock Text="{Binding}" Grid.Column="1"/>

                    </Grid>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

我认为你会达到你想要的效果。 希望这会有所帮助。