ViewModel查看关系/链接/同步

时间:2011-01-15 10:49:42

标签: c# wpf view viewmodel

第三个尝试描述问题:

我有一些视图模型类:

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类中存在的属性。

1 个答案:

答案 0 :(得分:0)

在DataTemplate内部放置您正在创建DataTemplate类型的对象是没有意义的。 DataTemplates用于创建数据的可视化表示,因此您首先需要一个关于如何可视化节点和连接的概念。