Wpf 作为格式化字符串绑定

Wpf 作为格式化字符串绑定,wpf,data-binding,string-formatting,Wpf,Data Binding,String Formatting,我有一个列表框,其中包含一组对象(通过ItemsSource绑定链接到ObservableCollection)。我还没有使用动态绑定。它当前使用对象的ToString()方法。ToString()方法以如下方式显示字符串:name(someOtherProperty) 但是,即使实现了INotifyPropertyChanged并且我使用了ObservableCollection,如果我更改了项属性,该字符串也不会更新 我相信这是因为它只调用ToString一次。相反,我想我必须使用数据绑定,

我有一个列表框,其中包含一组对象(通过ItemsSource绑定链接到ObservableCollection)。我还没有使用动态绑定。它当前使用对象的
ToString()
方法。ToString()方法以如下方式显示字符串:
name(someOtherProperty)

但是,即使实现了INotifyPropertyChanged并且我使用了ObservableCollection,如果我更改了项属性,该字符串也不会更新

我相信这是因为它只调用
ToString
一次。相反,我想我必须使用数据绑定,但如何使用它形成这样的字符串?>


谢谢。

您可以使用多重绑定,例如:

<MultiBinding StringFormat="{}{0} ({1})">
    <Binding Path="name"/>
    <Binding Path="someOtherProperty"/>
</MultiBinding>
<ListBox ...>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <!-- The above binding here -->
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

如果您只是让它执行ToString,则根本没有适当的绑定,任何通知都不会有任何效果

您可以这样使用它:

<MultiBinding StringFormat="{}{0} ({1})">
    <Binding Path="name"/>
    <Binding Path="someOtherProperty"/>
</MultiBinding>
<ListBox ...>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <!-- The above binding here -->
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>


您的断言,即它将只调用
ToString
方法一次,因为它从未收到会导致调用它的PropertyChange通知。我认为您可以通过执行一个
PropertyChanged(null)
命令来强制它再次调用
ToString
,该命令告诉它再次检查所有绑定。除此之外,我不明白你问题的其余部分。@CodingGorilla:这不行,因为一开始没有绑定,方法只是执行了,不是这样。是的,这就是为什么我说“我想…”,我不确定,但认为可能值得一试。似乎出于某种原因,他不能或不想绑定到一个正确的属性。我想做的是显示两个属性,而不是一个。我必须在哪里设置此属性?你能更新你的问题以显示实际的绑定XAML吗,然后,我们可以帮助您正确设置格式,以使用
多重绑定
。必须有一些绑定,否则它不会显示任何内容@CodingGorilla:不,如果您没有指定字符串的名称,这就是这里的问题。@CodingGorilla:对不起,H.B.是对的,没有绑定。。我只是将itemsSource设置为ObservaleCollection,以便一次调用tostring。我只是不知道如何将多个属性绑定到同一个元素。