wpf IValueConverter 不更新 View

标签 wpf binding ivalueconverter

我正在尝试使用 IValueConverter 将集合转换为代理对象以进行数据绑定(bind)。

转换器似乎工作正常,但问题是在集合中添加或删除新对象时。 View 中同样没有刷新..

模型对象:

public class A {
   public ObservableCollection<string> Members { get; }
}

转换器

public class MemberConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        var collection = new CompositeCollection();
        var a = value as A;

        a.Members.ToList().ForEach(member => {
            collection.Add(new ProxyClass{ A= a, Member= member });
        });

        return collection; 
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        throw new System.NotImplementedException();
    }
}

代理类

public class ProxyClass {
    public A A { get; set; }

    public string Member{ get; set; }
 }

XAML:

<DataTemplate DataType="{x:Type my:ProxyClass}">
            <TextBlock Text="{Binding Path=Member}"/>
</DataTemplate>
<HierarchicalDataTemplate DataType="{x:Type A}" ItemsSource="{Binding Converter={StaticResource MemberConverter}}">
            <TextBlock Text ="{Binding}"/>
</HierarchicalDataTemplate>

最佳答案

只有当绑定(bind)所绑定(bind)的属性的属性更改通知发生更改时,才会重新评估绑定(bind)。在这种情况下,ItemsSource 绑定(bind)到 DataContext(A 实例本身),因此除非给它一个新的 A 实例,否则它不会被重新评估。没有任何内容监听集合引发的更改通知,因为赋予 ItemsSource 的值实际上是您在转换器中创建的不同集合实例。

一种选择是让转换器创建一个辅助类,该类 Hook 源集合的 CollectionChanged 事件(即传递到转换器的值),并且该对象将负责保留源集合及其在其中创建的集契约(Contract)步。另一种选择是尝试强制重新评估绑定(bind) - 例如使用“Members”路径作为 ItemsSource 绑定(bind),并且当您更改集合的内容时,会在 A 上引发“Members”的属性更改通知。

关于wpf IValueConverter 不更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10974688/

相关文章:

c# - WPF ItemsControl 按钮命令绑定(bind)不起作用

WPF 将 IsEnabled 绑定(bind)到列表框 SelectedItem

binding - 使用 MonoTouch native 库绑定(bind)链接失败

c# - WPF 字符串到双转换器

c# - 如何使笔刷平滑而中间没有线条

c# - 如何将现代 UI 菜单文本更改为大写

c# - 调整 WPF ListBox 选择框的大小

wpf - 这个绑定(bind)有什么问题?

c# - MVVM、ViewModelLocator、根据属性动态显示View和ViewModel

c# - 是否可以为 Silverlight 中的静态资源提供类型转换器?