繁体   English   中英

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

[英]External UserControl with Bindings in WPF/C#

因此,我有一个UserControl,它基本上是一个具有3个不同的DataGrid和一些标签的网格。 看到我需要如何使用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. 正如一位评论者所建议的,将您的视图模型绑定到用户控件的数据上下文。 这样可以将视图模型中的所有内容绑定到控件的内部工作。 问题在于内部工作方式现在取决于对象与之关联的数据。

  2. 仅为视图模型中用户控件实际需要的属性创建依赖项属性。 在所有案例中,我个人都比第一个更喜欢这种情况,因为您完全知道控件需要什么数据,并且可以以视图模型不负责的方式以控件特有的方式操作绑定数据,因此,我个人最喜欢这种情况。

创建自己的控件时,需要注意有关设计师支持的几件事:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM