powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / TreeView, информация об узле, обойтись одними привязками
5 сообщений из 5, страница 1 из 1
TreeView, информация об узле, обойтись одними привязками
    #38698321
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

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

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

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

...
Рейтинг: 0 / 0
TreeView, информация об узле, обойтись одними привязками
    #38698885
Фотография @k@DElpher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_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
TreeView, информация об узле, обойтись одними привязками
    #38698887
Фотография @k@DElpher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@k@DElpherТам же можно определить другие типы ресурсов.


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

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


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