Silverlight:如何使用带有ItemsControl的转换器?

时间:2010-12-09 03:21:27

标签: silverlight data-binding xaml

我有一个ItemsControl,其ItemsSource绑定到一个整数ID列表。转换器使用ID来查找应向用户显示的名称。我怎样才能在XAML中做到这一点?这是我到目前为止所做的,但它不起作用:

    <ItemsControl ItemsSource="{Binding Topics}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding FallbackValue='topic name', Converter={StaticResource topicToStrConverter}}" Margin="0,10,0,0"/>
                    <Button>
                        <Image Source="/PlumPudding;component/Images/appbar.cancel.rest.png" />
                    </Button>
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

真的,我想要作为转换器的参数是在模板中显示的整个项目 - 而不是该项目的属性。这是什么语法?

我正在使用Silverlight 4。

3 个答案:

答案 0 :(得分:0)

您的代码对我的意见是正确的。

似乎'转换器'中的问题。尝试调试topicToStrConverter的代码。

答案 1 :(得分:0)

如果主题是列表,那么你拥有的是正确的。

但是,如果Topics是List,而Id是Topic类的属性,则需要使用“Path = Id”。所以:{Binding FallbakcValue ='Bla',Path = Id,Converter = {StaticResource yourConverter}

回答第二个问题: “我想要作为转换器的参数是模板中显示的整个项目 - 而不是该项目的属性”

您正在使用的此语法将传递List中的整个对象,因此在您的情况下会将int传递给转换器。同样,如果它是一个列表,那么Topic对象将被传递给转换器。

答案 2 :(得分:0)

您必须为项目控件或其中一个父项设置DataContext。如果不这样做,则没有绑定的上下文。