第三个尝试描述问题:
我有一些视图模型类:
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; }
}
我还有一些模板来显示这些模型:
<DataTemplate DataType="{x:Type vm:Node}">…</DataTemplate>
<DataTemplate DataType="{x:Type vm:Connection}">
<my:ConnectionElment StartNodeElment="???" EndNodeElment="???">
</my:ConnectionElment>
<DataTemplate>
但问题是DataTemplate for Connection需要引用两个UIElement类型的元素,我怎么能传递这两个,怎么能填充???在上面的表达?
修改 我实际上想要隐藏这个尝试的一部分,但正如我在那里描述的那样:Sunchronizing view model and view。我会用这样的东西:
<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 >
Node DataTemplate的类似内容:
<DataTemplate DataType="{x:Type vm:Node}">
<kw:ElementThumb Canvas.Left="{Binding CanvasLeft,Mode=TwoWay}"
Canvas.Top="{Binding CanvasTop,Mode=TwoWay}">
</kw:ElementThumb>
</DataTemplate>
Canvasleft和CanvasTop是Node和ElementThumb类中存在的属性。
答案 0 :(得分:0)
在DataTemplate内部放置您正在创建DataTemplate类型的对象是没有意义的。 DataTemplates用于创建数据的可视化表示,因此您首先需要一个关于如何可视化节点和连接的概念。