WPF UserControls:依赖属性或DataContext?

时间:2014-10-02 17:07:31

标签: wpf user-controls wpf-controls dependency-properties datacontext

首先,我希望这个问题不违反规则,如果确实存在,请提前抱歉。

我刚刚与同事讨论了我们设计和实施用户控件的方式。我们一直在创建期望某种数据类型的视图,但却没有强制实现这种期望,我认为这是错误的方法。通过为DataContext赋值来实例化控件,但由于它是Object类型,不仅没有数据类型强制执行,而且开始变得很难看到传递给控件的数据类型(因为通常,控件嵌套在以相同方式实现的其他用户控件下的多个层。)

我的建议是改为使用依赖属性,而不是DataContext。在内部,用户控件可以将它的DataContext设置为此依赖项属性。这似乎不仅是最好的方法,而且也是WPF中不成文的标准。

我的同事担心这会导致困难,因为它不如使用DataContext(类型Object)灵活。

我计划在下次软件会议上再次提出这个问题,是否有任何书籍/网站可以帮助争论一个案例或其他案例?

TLDR;哪个更正确?

    <DataTemplate DataType="{x:Type vm:MyCustomViewModel}">
        <vw:MyCustomView />
    </DataTemplate>

或者

    <DataTemplate DataType="{x:Type vm:MyCustomViewModel}">
        <vw:MyCustomView Value="{Binding}" />
    </DataTemplate>

1 个答案:

答案 0 :(得分:0)

我的同事已经找到了一个很好的折衷方案,允许他以同样的方式使用用户控件,但允许我强制执行数据类型(并一目了然地说明预期的类型应该是什么)。以下是我们将从现在开始使用的解决方案的链接:http://graemehill.ca/specifying-expected-datacontext-type-in-wpf/