当前位置:  开发笔记 > 开发工具 > 正文

在IValueConverter上进行数据绑定

如何解决《在IValueConverter上进行数据绑定》经验,为你挑选了1个好方法。

有人知道是否可以在基于IValueConverter的类上进行数据绑定?

我有以下转换器:

[ValueConversion(typeof(int), typeof(Article))]
public class LookupArticleConverter : FrameworkElement, IValueConverter {
    public static readonly DependencyProperty ArticlesProperty = DependencyProperty.Register("Articles", typeof(IEnumerable
), typeof(LookupArticleConverter)); public IEnumerable
Articles { get { return (IEnumerable
)GetValue(ArticlesProperty); } set { SetValue(ArticlesProperty, value); } } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { ... } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { ... } }

它的目的是通过Id查找列表中的文章,并返回该文章.

但是,我想通过将一个集合数据绑定到它来填充Articles属性,如下所示:


但这似乎不起作用.永远不会调用setter方法.source属性包含一个实际的非空集合,所以这不是问题.

两者都没有关于输出日志中的绑定的错误消息.

有线索吗?



1> surfen..:

所以,问题是资源不是可视化树的一部分.为了完成这项工作,你必须:

1.让ValueConverter继承Freezable

 public class CustomConverter : Freezable, IValueConverter
 {

    public static readonly DependencyProperty LookupItemsProperty =
        DependencyProperty.Register("LookupItems", typeof(IEnumerable), typeof(CustomConverter), new PropertyMetadata(default(IEnumerable)));

    public IEnumerable LookupItems
    {
        get { return (IEnumerable)GetValue(LookupItemsProperty); }
        set { SetValue(LookupItemsProperty, value); }
    }

    #region Overrides of Freezable

    /// 
    /// When implemented in a derived class, creates a new instance of the  derived class.
    /// 
    /// 
    /// The new instance.
    /// 
    protected override Freezable CreateInstanceCore()
    {
        return new CustomConverter();
    }

    #endregion Overrides of Freezable

    // ... Usual IValueConverter stuff ...

}

2.使用Binding ElementName绑定到可视树

 



推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有