C# 视图模型视图关系/链接/同步

C# 视图模型视图关系/链接/同步,c#,wpf,view,viewmodel,C#,Wpf,View,Viewmodel,第三,尝试描述问题: 尝试1: Try2: Try3: 我有一些视图模型的类: public class Node : INotifyPropertyChanged { Guid NodeId { get; set; } public string Name { get; set; } } public class Connection: INotifyPropertyChanged { public Node

第三,尝试描述问题:

  • 尝试1:
  • Try2:
  • Try3:
我有一些视图模型的类:

public class Node : INotifyPropertyChanged
    {
        Guid NodeId { get; set; }

        public string Name { get; set; }

    }

public class Connection: INotifyPropertyChanged
    {
        public Node StartNode { get; set; }
        public Node EndNode { get; set; }
    }

public class SettingsPackModel
{
        public List<Node> Nodes { get; private set; }
        public List<Connection> Connections { get; private set; }
}
公共类节点:INotifyPropertyChanged
{
Guid节点ID{get;set;}
公共字符串名称{get;set;}
}
公共类连接:INotifyPropertyChanged
{
公共节点开始节点{get;set;}
公共节点EndNode{get;set;}
}
公共类设置打包模型
{
公共列表节点{get;private set;}
公共列表连接{get;private set;}
}
我还有一些模板来显示这些模型:

<DataTemplate DataType="{x:Type vm:Node}">…</DataTemplate>
<DataTemplate DataType="{x:Type vm:Connection}">
 <my:ConnectionElment StartNodeElment="???" EndNodeElment="???"> 
</my:ConnectionElment>
<DataTemplate>
但问题是连接的DataTemplate需要引用UIElement类型的两个元素,我如何传递这两个元素,我如何填充???在上面的表达中

编辑: 实际上,我想隐藏这是这次尝试的一部分,但正如我在那里描述的那样:。我会用这样的方式:

<ItemsControl    ItemsSource="{Binding AllElements}" 
ItemContainerStyle="{StaticResource ElementThumbVMDataTemplateStyle> 
        <ItemsControl.ItemsPanel> 
            <ItemsPanelTemplate> 
                <kw:DiagramCanvas /> 
            </ItemsPanelTemplate> 
        </ItemsControl.ItemsPanel> 
    </ItemsControl> 
<Style  x:Key="ElementThumbVMDataTemplateStyle" TargetType="ContentPresenter"> 
                <Setter Property="Canvas.Left"  Value="{Binding CanvasLeft,Mode=TwoWay}" /> 
                <Setter Property="Canvas.Top"  Value="{Binding CanvasTop,Mode=TwoWay}" />             </Style > 

将您正在为其创建DataTemplate的类型的对象放在DataTemplate本身内部是毫无意义的。数据模板用于创建数据的可视化表示,因此您首先需要了解如何可视化节点和连接。

越位:
INotifyPropertyChanged
和自动导入属性是一种奇怪的组合。我会在需要时尽快实现,但这里的问题是另一件事。如果需要的话,我可以分享更多的实现。
<DataTemplate DataType="{x:Type vm:Node}"> 
                <kw:ElementThumb Canvas.Left="{Binding CanvasLeft,Mode=TwoWay}" 
                                 Canvas.Top="{Binding CanvasTop,Mode=TwoWay}"> 
                </kw:ElementThumb> 
            </DataTemplate>