所以,我有一个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中做到这一点?或者我必须以编程方式执行此操作吗?
答案 0 :(得分:1)
有两种方法可以将视图模型传达给控件:
正如一位评论者建议的那样,将您的视图模型绑定到用户控件的数据上下文。这样可以将视图模型中的所有内容绑定到控件的内部工作方式。问题是内部工作现在取决于与对象相关联的数据。
仅为视图模型中的用户控件实际需要的属性创建依赖项属性。在几乎99%的情况下,我个人更喜欢这个,因为你确切知道控件所期望的数据,你可以用控件独有的方式操作绑定数据,这可能是视图模型不负责的。
在创建自己的控件时,请注意设计师支持: