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