Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение шаблона при смени типа DataCotntext 
V
    Опции темы
Rohoss
Дата 7.5.2011, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



В окне находится Usercontrol, DataContext которого биндится к определённым данным (в ViewModel). Так вот, я хочу чтобы автоматически подбирался шаблон для UserControl при смене типа DataContext.
То есть, изменился тип DataContext, и соответственно изменился шаблон отображения данных. Как это лучше и правильней всего организовать?


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
-Mikle-
Дата 7.5.2011, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Если для WPF.

Где нить в ресурсах:
Код

    <DataTemplate DataType="{x:Type vm:MyModel1}">
        <v:MyView1 />
    </DataTemplate>

    <DataTemplate DataType="{x:Type vm:MyModel2}">
        <v:MyView2 />
    </DataTemplate>


В том месте, где надо менять динамически:
Код

    <ContentPresenter Content={Binding DynamicContent} />


Добавлено через 1 минуту и 40 секунд
Кстати, вместо ContentPresenter вполне сгодится и сам UserControl.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Rohoss
Дата 7.5.2011, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



-Mikle-, спасибо, уже не знаю как благодарить  smile

Добавлено через 3 минуты и 16 секунд
А вот интересно, можно применить шаблон на основе значений свойств в ViewModel
Например, если какое то свойство ViewModel равно true прибиндить один шаблон, если false то другой?


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
-Mikle-
Дата 7.5.2011, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Всегда пожалуйста  smile 

По поводу последнего вопроса, можешь использовать для этих целей DataTemplateSelector, StyleSelector и прочие подобные штуки, они как раз таки для этого и нужны. Если не разберешься, пиши.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Rohoss
Дата 7.5.2011, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(-Mikle- @  7.5.2011,  22:06 Найти цитируемый пост)
По поводу последнего вопроса, можешь использовать для этих целей DataTemplateSelector, StyleSelector и прочие подобные штуки, они как раз таки для этого и нужны. Если не разберешься, пиши. 

Ну это пока только теоретический вопрос smile . Как мне кажется эти все Selector'ы очень не удобны и поэтому их лучше не использовать без необходимости.


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
-Mikle-
Дата 8.5.2011, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Цитата(Rohoss @  8.5.2011,  01:18 Найти цитируемый пост)
Как мне кажется эти все Selector'ы очень не удобны

Да, есть такое дело. Как вариант, в некоторых случаях может подойти управление Visibility. Например, если у вас есть булиново свойство от которого зависит отображение того или иного представления (или его части), думаю вполне подойдет.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Rohoss
Дата 8.5.2011, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(-Mikle- @  8.5.2011,  08:42 Найти цитируемый пост)
Как вариант, в некоторых случаях может подойти управление Visibility

Ну так Visibility не буленова типа... Тогда конвертер придётся делать...


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
-Mikle-
Дата 8.5.2011, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Ну да, но конвертеры простая и хорошая практика.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Rohoss
Дата 9.5.2011, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(Rohoss @  7.5.2011,  21:40 Найти цитируемый пост)
А вот интересно, можно применить шаблон на основе значений свойств в ViewModel
Например, если какое то свойство ViewModel равно true прибиндить один шаблон, если false то другой? 

Похоже есть ещё вариант - использовать DataTrigger
 
Код

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var rd = new Xceed.Wpf.Themes.Media.MediaResourceDictionary();

            this.Resources.MergedDictionaries.Add((ResourceDictionary)rd);

            var list = new ObservableCollection<TestClass>()
                           {
                               new TestClass() {PropStr = "s1", PropBool = false},
                               new TestClass() {PropStr = "s1", PropBool = true},
                               new TestClass() {PropStr = "s1", PropBool = false
                               }};

            this.lv1.ItemsSource = list;
        }

    }

    public class TestClass
    {
        public string PropStr { get; set; }

        public bool PropBool { get; set; }
    }


Код

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        
    </Window.Resources>
    <Grid>
        <ListView Name="lv1">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Button">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Button Content="My Button" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Test">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Button Name="btn" Content="But" Background="Green" />
                                <DataTemplate.Triggers>
                                    <DataTrigger Binding="{Binding PropBool}" Value="True">
                                        <Setter TargetName="btn" Property="Button.Background" Value="Red">
                                        </Setter>
                                    </DataTrigger>
                                </DataTemplate.Triggers>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Test2">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ContentControl Name="cnt" />
                                <DataTemplate.Triggers>
                                    <DataTrigger Binding="{Binding PropBool}" Value="True">
                                        <Setter TargetName="cnt" Property="ContentControl.Content">
                                            <Setter.Value>
                                                <Button Content="btn-1-1" />
                                            </Setter.Value>
                                        </Setter>
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding PropBool}" Value="False">
                                        <Setter TargetName="cnt" Property="ContentControl.Content">
                                            <Setter.Value>
                                                <CheckBox Content="cbx-1-1" />
                                            </Setter.Value>
                                        </Setter>
                                    </DataTrigger>
                                </DataTemplate.Triggers>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>



Добавлено через 5 минут и 53 секунды
Прикрепил пример 

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  WpfApp.rar 40,78 Kb


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
-Mikle-
Дата 9.5.2011, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Ну да, все это инструменты разные, в одном случае подходит одно, в другом - другое. Выбираешь в зависимости от условий, удобства и личных предпочтений в каждом конкретном случае.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1273 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.