Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / TreeView, информация об узле, обойтись одними привязками / 5 сообщений из 5, страница 1 из 1
16.07.2014, 19:33
    #38698321
_Novichok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView, информация об узле, обойтись одними привязками
Здравствуйте.

Пишу с использованием MVVM. Есть задача: имеется дерево, и правая часть. в зависимости от выбранного узла отображается правая часть со своими данными. каждый узел в DataContext имеет свою ViewModel. Хотелось бы одними привязками в XAML реализовать эту задачу.

Как приблизительно я это вижу: для правой части в ресурсах описано несколько DataTemplate'ов с определенным DataType. По тригеру, например, с выбранного узла ViewModel передается на правую часть, где темплейты делают свое дело и правая часть отображается. Но для меня стоит вопрос: как вот эту ViewModel передать правой части.

Как это можно сделать, какие есть идеи?

...
Рейтинг: 0 / 0
17.07.2014, 12:31
    #38698885
@k@DElpher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView, информация об узле, обойтись одними привязками
_Novichok,

1) Обычно я в MainViewModel опредеяю SelectedItem для всего, где можно что-то выделить, потому что потом обычно эти элементы обрабатываются кнопками.
2) Второй вариант ContentPresenter привязать к SelectedItem дерева:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 <TreeView x:Name="treeView" ItemsSource="{Binding}" HorizontalAlignment="Left" Height="299" Margin="10,10,0,0"  Width="100">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type vm:ItemViewModel}">
                    <TextBlock Text="{Binding Name}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
        <ContentPresenter HorizontalAlignment="Left" Margin="115,10,0,0" VerticalAlignment="Top" Height="299" Width="392"  Content="{Binding SelectedItem, ElementName=treeView, Mode=OneWay}">
            <ContentPresenter.Resources>
                <DataTemplate DataType="{x:Type vm:ItemViewModel}">
                    <StackPanel>
                        <TextBlock Text="{Binding Name}"/>
                        <TextBlock Text="{Binding Area}"/>
                        <TextBlock Text="{Binding Status}"/>
                    </StackPanel>
                </DataTemplate>
            </ContentPresenter.Resources>
        </ContentPresenter>



Привязка тут: Content="{Binding SelectedItem, ElementName=treeView, Mode=OneWay}">
Сам презентер определяет в каком виде показать модель представления в разделе ContentPresenter.Resources.
Там же можно определить другие типы ресурсов.


В примере модель представления простая:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
   public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            List<ItemViewModel> mainViewModel = new List<ItemViewModel>();
            var item = new ItemViewModel("Главный офис", 230, "Здание");
            mainViewModel.Add(item);

            var subItem1 = new ItemViewModel("1 этаж", 115, "Этаж");
            var subItem2 = new ItemViewModel("2 этаж", 115, "Этаж");
            item.Children = new List<ItemViewModel>();
            item.Children.Add(subItem1);
            item.Children.Add(subItem2);

            this.DataContext = mainViewModel;
        }
    }
    public class ItemViewModel
    {
        public ItemViewModel(string name, double area, string status)
        {
            Name = name;
            Area = area;
            Status = status;
        }
        public string Name { get; set; }
        public double Area { get; set; }
        public string Status { get; set; }

        public List<ItemViewModel> Children { get; set; }
    }


...
Рейтинг: 0 / 0
17.07.2014, 12:32
    #38698887
@k@DElpher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView, информация об узле, обойтись одними привязками
@k@DElpherТам же можно определить другие типы ресурсов.


Другие типы моделей представления*
...
Рейтинг: 0 / 0
19.07.2014, 00:42
    #38700891
_Novichok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView, информация об узле, обойтись одними привязками
@k@DElpher,

Спасибо, попробую, кажется, это то, что мне нужно
...
Рейтинг: 0 / 0
19.07.2014, 00:53
    #38700893
_Novichok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView, информация об узле, обойтись одними привязками
Да-да-да, именно оно, работает, как нужно
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / TreeView, информация об узле, обойтись одними привязками / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]