Как я могу убедиться, что представление отображается только тогда, когда тип DataContext соответствует типу цели моего шаблона данных? - PullRequest
0 голосов
/ 10 декабря 2010
<ItemsControl DockPanel.Dock="Top" ItemsSource="{Binding Path={x:Static vmc:clsPersonViewModel.ChildrenPath}, Mode=OneWay}">
   <ItemsControl.ItemTemplate>
      <DataTemplate DataType="{x:Type vmc:clsPersonViewModel}">
         <TextBlock    Text="{Binding Path={x:Static vmc:clsPersonViewModel.TrimPath}}"
                  Height="20"
                  Margin="2">
         </TextBlock>
      </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

В приведенном выше коде, если нет дочерних элементов (свойство ChildrenPath возвращает NULL), в представлении ничего не отображается. В приведенном ниже коде, когда ChildrenDataSetPath имеет значение NULL, XamDataGrid по-прежнему отображается. Как добиться того же для отдельного объекта (в отличие от коллекции), что и текст данных?

<DataTemplate DataType="{x:Type vmb:clsPersonViewModel}">
   <igDP:XamDataGrid DataSource="{Binding Path={x:Static vmb:clsPersonViewModel.ChildrenDataSetPath}}">
   </igDP:XamDataGrid>
</DataTemplate>

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

Я наконец достиг этого, используя ContentControl.Я сопоставил свой DataContext со свойством Content ContentControl, а затем добавил шаблон данных для представления в ресурсах.Когда текст данных не имеет тип clsPersonViewModel, он не отображает ucPersonView.

<ContentControl Content="{Binding ElementName=_RightSidePanel, Path=DataContext}" >
<ContentControl.Resources>
    <DataTemplate DataType="{x:Type vmb:clsPersonViewModel}">
        <igDP:ucPersonView />               
    </DataTemplate>
</ContentControl.Resources>
</ContentControl>
0 голосов
/ 10 декабря 2010

Во втором случае вы применяете DataTemplate к синглтону clsPersonViewModel, а затем говорите, что, несмотря ни на что, там есть сетка. Затем в сетке вы связываете источник данных. Пока вы применяете DataTemplate к синглтону, который всегда там, у вас все будет хорошо.

Например, предположим, что PersonViewModel предоставляет свойство Parent. Вы могли бы сделать это:

<DataTemplate DataType="{x:Type vmb:clsPersonViewModel}">
    <igDP:ParentView DataContext="{Binding Path={x:Static vmb:clsPersonViewModel.Parent}}">
    </igDP:ParentView>
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...