Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Вопрос про Binding и Trigger MVVM / 22 сообщений из 22, страница 1 из 1
09.08.2014, 17:15
    #38716565
Sergey S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Подскажите плиз, хочу разобраться для чуть более сложного примера.
Нужно в зависимости от значений свойства к примеру задать различный Background у TextBlock

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<TextBlock Text="{Binding Path=Name}" FontSize="14"  >
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TextBlock}}, Path=PlacementTarget.SelectedItem.Id}" Value="1">
                    <Setter Property="FontWeight" Value="Normal" />
                </DataTrigger>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TextBlock}}, Path=PlacementTarget.SelectedItem.Id}" Value="0">
                    <Setter Property="FontWeight" Value="Bold" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>


где
Код: xml
1.
PlacementTarget.SelectedItem.Id

это на форме есть TreeView, там как раз и находится TextBlock, забинденный на коллекцию объектов вида
Код: c#
1.
2.
3.
4.
5.
 public interface IEntry
    {
        int Id { get; set; }
        string Name { get; set; }
   }


Данные отображаются, но цвет не меняется....
С WPF начинаю только разбираться, подскажите плиз - как сделать чтобы биндилось правильно
...
Рейтинг: 0 / 0
10.08.2014, 23:58
    #38716899
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Sergey S,

Попробуйте так:

Код: xml
1.
2.
<DataTrigger Binding="{Binding ElementName=MyTreeView, Path=SelectedItem.Id}" Value="0">
        <Setter Property="Background" Value="Red">
...
Рейтинг: 0 / 0
11.08.2014, 10:39
    #38717036
Sergey S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Большое спасибо. почти получилось, но подсвечивает красным все объекты TextBlock:
Код: 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.
<TreeView Name="GroupView" Grid.Row="0" Grid.Column="0" ItemsSource="{Binding Path=GroupList}">
<TreeView.Resources>
    <HierarchicalDataTemplate DataType="{x:Type wsl:GroupActivity}" ItemsSource="{Binding Entries}">
        <StackPanel Orientation="Horizontal">
            <Image Width="16" Height="16" Margin="3,0" Source="Images\softwared_16_16.png" />
            <TextBlock Text="{Binding Path=Name}" FontSize="14" />
        </StackPanel>
    </HierarchicalDataTemplate>
    <DataTemplate DataType="{x:Type wsl:EntryActivity}" >
        <StackPanel Orientation="Horizontal">
            <TextBlock Name="txtName" Text="{Binding Path=Name}" FontSize="14" FontWeight="Normal"  >
                <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=GroupView, Path=SelectedItem.Id}" Value="1">
                                <Setter Property="FontWeight" Value="Bold" />
                                <Setter Property="Background" Value="Red"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </StackPanel>
    </DataTemplate>
</TreeView.Resources>
</TreeView>


А как менять характеристики именно выбранного, того что прошел условия проверки?
...
Рейтинг: 0 / 0
11.08.2014, 13:06
    #38717201
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Зачем городить эту триггерную xaml-лапшу? Что может быть проще делать внятный анализ во вью модели, а на выход отдавать годное значение для байдинга xaml.
...
Рейтинг: 0 / 0
11.08.2014, 16:14
    #38717417
Sergey S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Да вполне может быть, я до этого все делал или без гуи или под формочки, wpf - первое у меня, вот разбираюсь походу с wpf, mvvm. Поэтому и корявое пока все будет....
...
Рейтинг: 0 / 0
11.08.2014, 20:16
    #38717637
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Sergey S,

Только теперь понял, что именно Вы пытаетесь добиться. В таком случае придется переписать стандартный стиль TreeViewItem, который можно найти здесь . У Josh Smith есть хороший пример с пояснениями здесь .

МСУ,

Вопрос простоты зависит от степени владения xaml. Философия WPF/MVVM базируется на разделении логики обработки данных и их представлении.
...
Рейтинг: 0 / 0
11.08.2014, 20:58
    #38717653
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
iMrTidyВопрос простоты зависит от степени владения xaml. Философия WPF/MVVM базируется на разделении логики обработки данных и их представлении.
Логика во вью ничего хорошего сулить не может, кроме проблем.
...
Рейтинг: 0 / 0
11.08.2014, 21:36
    #38717678
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
МСУiMrTidyВопрос простоты зависит от степени владения xaml. Философия WPF/MVVM базируется на разделении логики обработки данных и их представлении.
Логика во вью ничего хорошего сулить не может, кроме проблем.

Я с Вами полностью согласен, но, на мой взгляд, изменение стандартной подсветки по условию все же презентация.
...
Рейтинг: 0 / 0
12.08.2014, 10:53
    #38717880
Badabum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Большое спасибо, буду разбираться
...
Рейтинг: 0 / 0
14.08.2014, 11:46
    #38720079
Супер_Пав
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Согласен с МСУ. Сам когда-то делал подсветку элементов. Вся логика была зашита во ViewModel.
Для данного примера, нужно будет создать одно поле по вьехе(там где Name) и забиндить на него Forecolor у TextBlock.
...
Рейтинг: 0 / 0
14.08.2014, 12:19
    #38720128
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Ну или свой конвертер для выбора цвета написать.
...
Рейтинг: 0 / 0
14.08.2014, 12:20
    #38720132
Sergey S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Приблизительно понял, спасибо, буду смотреть
...
Рейтинг: 0 / 0
14.08.2014, 12:23
    #38720135
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
МСУНу или свой конвертер для выбора цвета написать.Благодаря триггерам конвертеры писать не надо, что экономит время и нервы. В триггере можно установить несколько свойств по одному условию. В триггерах могут быть анимации и прочие бантики.

Правильный ответ:
1. Во ViewModel разместить прикладную логику. Сделать булевое свойство.

2. Во View разместить DataTrigger. Привязать его к булевому свойству.
...
Рейтинг: 0 / 0
14.08.2014, 12:46
    #38720166
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Алексей КБлагодаря триггерам конвертеры писать не надо, что экономит время и нервы.
Да нафик твои триггеры не нужны :) Особенно когда этот xaml-лапшекод с логикой разрастается и поддерживать это уныние становится всё труднее и труднее. Что может быть проще написать даже самую неимоверно сложную логику во вью модели и отдать выхлоп в нужное свойство, которое тупо привязывается в разметке xaml?

Алексей К1. Во ViewModel разместить прикладную логику. Сделать булевое свойство.
Да.

Алексей К2. Во View разместить DataTrigger. Привязать его к булевому свойству.
Ни в коей мере
...
Рейтинг: 0 / 0
14.08.2014, 13:18
    #38720195
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
МСУАлексей КБлагодаря триггерам конвертеры писать не надо, что экономит время и нервы.
Да нафик твои триггеры не нужны :)Ну я согласен. Если не умеешь - лучше не использовать. :-)

Смотрим примеры , учимся...

Ну и пример с анимацией не помешает.
...
Рейтинг: 0 / 0
14.08.2014, 13:41
    #38720233
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Алексей КНу я согласен. Если не умеешь - лучше не использовать. :-)
А чего их там уметь? :)

Хотя я, конечно, допускаю, что фича сделана для тех, у кого семь пядей во лбу.

Алексей КСмотрим примеры , учимся...
Я в целом не против триггеров, но только если они самые простые, как в твоём случае. Банальная пара условий. Но когда представление разрастается и распухает, работать с ним становится невыносимо (даже декомпозиция не поможет). Вью модель - это спасение от всех бед.

Что может быть проще?

Код: c#
1.
<TextBlock Text="{Binding Name}" FontWeight="{Binding NameFontWeight}" />
...
Рейтинг: 0 / 0
14.08.2014, 13:57
    #38720257
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
МСУЯ в целом не против триггеров, но только если они самые простые, как в твоём случае. Банальная пара условий.Ну я же говорю, прикладная логика живёт во ViewModel. Во View живёт пара условий логика представления.
...
Рейтинг: 0 / 0
14.08.2014, 14:21
    #38720296
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
МСУБанальная пара условий. Но когда представление разрастается и распухает, работать с ним становится невыносимо (даже декомпозиция не поможет). Вью модель - это спасение от всех бед.Ну есть случай на триггерах чуть посложнее. Оно было раньше на конвертерах, но не понравилось. На триггерах получилось удобнее.
...
Рейтинг: 0 / 0
14.08.2014, 14:24
    #38720300
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
МСУЧто может быть проще?
Код: c#
1.
<TextBlock Text="{Binding Name}" FontWeight="{Binding NameFontWeight}" />

ViewModel может приходить с сервера. В этом случае для неё придётся городить класс-обёртку с логикой представления. Это неудобно.
...
Рейтинг: 0 / 0
14.08.2014, 15:34
    #38720395
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
Алексей КМСУЯ в целом не против триггеров, но только если они самые простые, как в твоём случае. Банальная пара условий.Ну я же говорю, прикладная логика живёт во ViewModel. Во View живёт пара условий логика представления.
Во view не стоит пихать логику. Триггера - это залипушка для быстренько нагавнять, чтобы работало. Когда будет много UI логики + сложная логика, это разумно вынести в централизованное место (view model).

Алексей КМСУБанальная пара условий. Но когда представление разрастается и распухает, работать с ним становится невыносимо (даже декомпозиция не поможет). Вью модель - это спасение от всех бед.Ну есть случай на триггерах чуть посложнее. Оно было раньше на конвертерах, но не понравилось. На триггерах получилось удобнее.
Это эпический ад.

Алексей КМСУЧто может быть проще?
Код: c#
1.
<TextBlock Text="{Binding Name}" FontWeight="{Binding NameFontWeight}" />

ViewModel может приходить с сервера. В этом случае для неё придётся городить класс-обёртку с логикой представления. Это неудобно.
View модель, приходящая с сервера - это скорее всего какое-то экзотическое действо, нежели внятная практика использования слоя. Но даже если и так, городи обертку, не вижу поводов для паники. Но триггера во вьюхе - это уныние.
...
Рейтинг: 0 / 0
14.08.2014, 19:05
    #38720719
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
МСУАлексей Кпропущено...
Ну есть случай на триггерах чуть посложнее. Оно было раньше на конвертерах, но не понравилось. На триггерах получилось удобнее.
Это эпический ад.Это трудовые будни контролописателя. :-)

Ну если хочешь - напиши свой SplitContainer, сравним. :-)

МСУАлексей Кпропущено...
ViewModel может приходить с сервера. В этом случае для неё придётся городить класс-обёртку с логикой представления. Это неудобно.
View модель, приходящая с сервера - это скорее всего какое-то экзотическое действо, нежели внятная практика использования слоя.Это скорее путаница в терминологии. Данные приходят с сервера - это Model. Эти же данные биндим без всяких обёрток к контролам - значит это ViewModel. Получается частный случай, оно одновременно и Model и ViewModel. Такие дела...

МСУНо даже если и так, городи обертку, не вижу поводов для паники. Но триггера во вьюхе - это уныние.А я сразу сказал что не умеешь. Это тебе не то что в Asp.Net-те разором HTML собирать. Тут всё гораздо жёстче. :-)
...
Рейтинг: 0 / 0
14.08.2014, 19:09
    #38720721
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про Binding и Trigger MVVM
МСУАлексей Кпропущено...
Ну есть случай на триггерах чуть посложнее. Оно было раньше на конвертерах, но не понравилось. На триггерах получилось удобнее.
Это эпический ад.зы: видел я SplitContainer, сделанный на базе Panel с кастомными MeasureOverride / ArrangeOverride. Вот там был ад. А тут всё просто и элегантно. :-)
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Вопрос про Binding и Trigger MVVM / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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