WPF / C中带有绑定的外部UserControl#

时间:2016-06-17 14:56:04

标签: c# wpf xaml binding user-controls

所以,我有一个UserControl,它基本上是一个包含3个不同DataGrids和一些标签的Grid。看到我需要使用它3次,而不是复制和粘贴代码,我想我只生成一次并在我的主窗口中使用它。

我已将UserControl定义为:

<UserControl x:Class="Propuestas.UI.Andrei.DGMTX"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:local="clr-namespace:Propuestas.UI.Andrei"
             mc:Ignorable="d"
             Height="300" 
             Width="791.496">

我正在窗口中使用它:

<StackPanel Grid.Row="2">
    <local:DGMTX/>
    <local:DGMTX/>
    <local:DGMTX/>
</StackPanel>

出于某种原因,它不会出现在我主窗口的设计器面板中。有什么我做错了吗?

另外,我希望能够基于绑定元素进行绑定。例如,假设我有一个类Model,它包含我需要在UserControl中表示的所有数据。 我想做点什么

<local:DGMTX Binding = {Binding Model}/>

然后能够在我的UserControl中绑定其代码中的所有其他元素。有没有办法在XAML中做到这一点?或者我必须以编程方式执行此操作吗?

1 个答案:

答案 0 :(得分:1)

有两种方法可以将视图模型传达给控件:

  1. 正如一位评论者建议的那样,将您的视图模型绑定到用户控件的数据上下文。这样可以将视图模型中的所有内容绑定到控件的内部工作方式。问题是内部工作现在取决于与对象相关联的数据。

  2. 仅为视图模型中的用户控件实际需要的属性创建依赖项属性。在几乎99%的情况下,我个人更喜欢这个,因为你确切知道控件所期望的数据,你可以用控件独有的方式操作绑定数据,这可能是视图模型不负责的。

  3. 在创建自己的控件时,请注意设计师支持:

    1. 在WPF中,Visual Studio的设计者仍然存在很多问题。不相信我?尝试引用主程序集中定义的动态资源。设计师会崩溃并告诉你它无法找到。然而,这不是实际情况。一旦您运行该应用程序,您将永远不会看到此异常。
    2. 为了在设计器中看到对源的更改反映,您必须首先构建项目(控件所在的项目,不一定是引用它的项目)。有时,“清理”或(在某些情况下运气更好)“重建”项目是唯一在“构建”不起作用时更新主项目中的设计者的事情。
    3. 如果在考虑后者后仍然看不到任何内容,请考虑控件的实现。有什么不合适的地方吗?是不是有意外隐藏了什么?你可能一开始并不这么认为,也许要屈服和检查需要十个小时的挫折,但这些小事情可能会有所不同。