从UserControl获取绑定列表

时间:2017-08-10 12:07:24

标签: c# wpf user-controls dependency-properties

我想编写一个通用测试,我可以在没有WPF应用程序且没有TraceLogger(监听器)的情况下运行。

通用测试用于比较Interface与UserControl的绑定,以查看是否缺少绑定或绑定太多。

ivm是viewmodel的接口类型 v是一个视图

v应该绑定到ivm。

        var names_binding = listener.bindNames.Distinct(); //this is what i want to get rid of.
        var names_interface = ivm.GetProperties().Select(prop => prop.Name).Distinct();
        var tooMany = names_interface.Except(names_binding);
        var tooFew = names_binding.Except(names_interface);

我可以使用类似下面的代码获取我在某些条件下绑定的名称列表。 listener监听绑定错误的位置。

        object obj = new object();
        T_V view = new T_V();
        view.DataContext = obj; // empty object - all binding will fail
        DoEvents(); // Do Events pumps WPF so binding happens

我想用检查用户控件并提供所有绑定名称的代码替换它。我无法看到如何从用户控件获取所有绑定。我需要某种起点。

因此,本质上我寻找一个实现,提供绑定或完整绑定路径的属性名称。有没有办法从UserControl获取该信息?

    public IEnumerable<string> GetBindingPaths<T_V>() where T_V : UserControl, new()
    {
        var ret = Enumerable.Empty<string>();
        T_V view = new T_V();
        //// view.GetBindingExpression ???
        //// view.GetLocalValueEnumerator ???
        return ret;
    }

1 个答案:

答案 0 :(得分:0)

我正在寻找方法Html.HiddenFor。我只是没有得到如何立即使用它。以下是一个示例实现:

GetLocalValueEnumerator