gpt4 book ai didi

wpf - 为什么在 Collection 更改时不调用 Converter?

转载 作者:行者123 更新时间:2023-12-05 00:09:11 24 4
gpt4 key购买 nike

我做了一个CollectionToStringConverter可以转换任何IList成逗号分隔的字符串(例如“Item1, Item2, Item3”)。

我这样使用它:

<TextBlock Text="{Binding Items, 
Converter={StaticResource CollectionToStringConverter}}" />

以上工作,但只有一次当我加载用户界面。 ItemsObservableCollection .文本 block 没有更新,当我从 Items 添加或删除时,转换器不会被调用.

知道使这项工作缺少什么吗?

最佳答案

绑定(bind)到产生集合的属性。它会在集合实例本身发生变化时生效,而不是在集合中的项目发生变化时生效。

有很多方法可以实现您想要的行为,包括:

1) 绑定(bind)ItemsControl到集合和配置ItemTemplate如果它不是集合中的最后一项,则输出以逗号开头的文本。就像是:

<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<TextBlock>
<TextBlock Visibility="{Binding RelativeSource={RelativeSource PreviousData}, Converter={StaticResource PreviousDataConverter}}" Text=", "/>
<TextBlock Text="{Binding .}"/>
</TextBlock>
</ItemsControl.ItemTemplate>
</ItemsControl>

2) 在您的代码隐藏中编写代码以观察集合的变化并更新一个单独的属性,该属性将项目连接成一个 string .就像是:
public ctor()
{
_items = new ObservableCollection<string>();

_items.CollectionChanged += delegate
{
UpdateDisplayString();
};
}

private void UpdateDisplayString()
{
var sb = new StringBuilder();

//do concatentation

DisplayString = sb.ToString();
}

3) 自己写 ObservableCollection<T>维护类似于#2 的单独连接字符串的子类。

关于wpf - 为什么在 Collection 更改时不调用 Converter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/787188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com