Третья попытка описания проблемы:
У меня есть класс для просмотра моделей:
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, как я могу передать эти два, как я могу заполнить ??? в вышеприведенном выражении?
Edit:
Я на самом деле хочу скрыть эту часть в этой попытке, но, как я ее описал, здесь: Модель представления Sunchronizing и представление . Я бы использовал что-то вроде этого:
<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.