ViewModel Просматривает отношение / ссылку / синхронизацию - PullRequest
0 голосов
/ 15 января 2011

Третья попытка описания проблемы:

У меня есть класс для просмотра моделей:

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.

1 Ответ

0 голосов
/ 15 января 2011

Поместить объект типа, для которого вы создаете DataTemplate, внутри самого DataTemplate, совершенно бессмысленно. Шаблоны DataTemplates предназначены для создания визуального представления ваших данных, поэтому сначала вам нужно понять, как вы хотите визуализировать свои узлы и соединения.

...