【问题标题】:Binding as a formatted string绑定为格式化字符串
【发布时间】:2011-10-11 07:43:04
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 您断言它只会调用一次ToString 方法,因为它从未收到会导致它调用它的 PropertyChange 通知。我认为您可以通过执行PropertyChanged(null) 来强制它再次调用ToString,这会告诉它再次检查所有绑定。除此之外,我不明白你的其余问题。
  • @CodingGorilla:这不行,因为一开始没有绑定,方法只是被执行,仅此而已。
  • 是的,这就是我说“我认为...”的原因,我不确定,但认为这可能值得一试。似乎由于某种原因他不能或不想绑定到适当的属性。
  • 我想要做的是显示两个属性而不是一个。

标签: wpf data-binding string-formatting


【解决方案1】:

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

<MultiBinding StringFormat="{}{0} ({1})">
    <Binding Path="name"/>
    <Binding Path="someOtherProperty"/>
</MultiBinding>

如果你只是让它执行 ToString 根本就没有适当的绑定,任何通知都将无效。

你可以这样使用它:

<ListBox ...>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <!-- The above binding here -->
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

【讨论】:

  • 我必须在哪里设置这个?
  • 您能否更新您的问题以显示实际绑定的 XAML,然后我们可以帮助您正确格式化以使用 MultiBinding
  • 必须有 some 绑定,否则它不会显示任何内容!
  • @CodingGorilla:不,如果你没有指定任何 ToString 被调用,这就是这里的问题。
  • @CodingGorilla :对不起,H.B.是的,没有绑定..我只是将 itemsSource 设置为 observableCollection,所以 tostring 被调用一次。我只是不知道如何将多个属性绑定到同一个元素。
猜你喜欢
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2011-09-27
  • 2017-04-09
相关资源
最近更新 更多