powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Вопрос про Binding и Trigger MVVM
22 сообщений из 22, страница 1 из 1
Вопрос про Binding и Trigger MVVM
    #38716565
Sergey S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите плиз, хочу разобраться для чуть более сложного примера.
Нужно в зависимости от значений свойства к примеру задать различный 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
Вопрос про Binding и Trigger MVVM
    #38716899
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey S,

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

Код: xml
1.
2.
<DataTrigger Binding="{Binding ElementName=MyTreeView, Path=SelectedItem.Id}" Value="0">
        <Setter Property="Background" Value="Red">
...
Рейтинг: 0 / 0
Вопрос про Binding и Trigger MVVM
    #38717036
Sergey S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо. почти получилось, но подсвечивает красным все объекты 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
Вопрос про Binding и Trigger MVVM
    #38717201
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем городить эту триггерную xaml-лапшу? Что может быть проще делать внятный анализ во вью модели, а на выход отдавать годное значение для байдинга xaml.
...
Рейтинг: 0 / 0
Вопрос про Binding и Trigger MVVM
    #38717417
Sergey S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да вполне может быть, я до этого все делал или без гуи или под формочки, wpf - первое у меня, вот разбираюсь походу с wpf, mvvm. Поэтому и корявое пока все будет....
...
Рейтинг: 0 / 0
Вопрос про Binding и Trigger MVVM
    #38717637
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey S,

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

МСУ,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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