WPF 数据绑定和转换器

发布于 2024-08-08 10:31:36 字数 562 浏览 6 评论 0原文

我正在尝试将数据绑定到列表框,如下所示:

<ListBox x:Name="MyListBox" Margin="0,0,0,65">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Converter={StaticResource MyConverter}}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我绑定到整个对象而不是属性的原因是因为我的转换器将需要对象的多个属性来构建它返回的字符串。

这有效并且我的字符串被返回。但是当我更改 ObservableCollection 时,它基于的值在屏幕上不会更改。如果我只绑定到一个属性并更改它,那么该值就会发生变化。

我可以做些什么不同的事情?我无法绑定到单个属性,因为我需要转换器中的整个对象...并且 ConverterParameter 已被使用。

I'm trying to databind to a listbox like so:

<ListBox x:Name="MyListBox" Margin="0,0,0,65">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Converter={StaticResource MyConverter}}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

The reason I am binding to the whole object and not a property is because my converter will need multiple properties of the object to build the string that it returns.

This works and my string is returned. But then when I change the ObservableCollection that this is based on the value doesn't change on the screen. If I bind to just a single property and change it, then the value does change.

What can I do differently? I can't bind to a single property since I need the entire object in the converter... And the ConverterParameter is already being used.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一百个冬季 2024-08-15 10:31:36

请记住,如果您绑定到“main”属性并且主属性本身的值未更改,则绑定将没有理由刷新自身。它不知道您的转换器实际上是基于子属性的。您可以做的是使用 MultiBinding您不仅可以绑定“主”属性,还可以绑定特定的子属性。这使您的 IMultiValueConverter 实现可以访问主数据对象,但由于您还绑定到正在更改的子属性,因此当该子属性的值更改时也会刷新。

Remember, if you bind to the "main" property and the value of the main property itself isn't changed, the binding will have no reason to refresh itself. It has no clue that your converter is actually based off of a sub-property. What you can do is use a MultiBinding where you bind not only the "main" property, but also a specific sub-property. This gives your IMultiValueConverter implementation access to the main data object, but because you're also binding to the sub-property that's changing, will also be refreshed when that sub-property's value changes.

橘寄 2024-08-15 10:31:36

您可以尝试使用我的 MultiBinding每当触发任何绑定时,相信都会更新。您还可以使用 IMultiValueConverter 或只是利用绑定的 StringFormat。

You can try using a MultiBinding which I believe updates whenever any of its Bindings are triggered. You can also use an IMultiValueConverter or just take advantage of the StringFormat of the binding.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文