Сообщение Re[3]: WPF - DataTemplateSelector для ListBox не работает от 03.09.2018 10:37
Изменено 03.09.2018 10:38 ksg71
Re[3]: WPF - DataTemplateSelector для ListBox не работает
Здравствуйте, senglory, Вы писали:
K>>SelectTemplate вызывается до приcвоения нового значение свойства SelectedItem
K>>нужно в item соотв. свойство завести — выбран он или нет, выглядит может и избыточно но работать должно
S>Так в ListBoxItem и так есть свойство IsSelected, зачем еще и в данных его заводить?
да, в WPF и это не работает, DataTemplate выбирается только при добавлении элемента(биндинге) коллекции и потом уже на изменение его свойств не реагирует.
тогда в твоем случае надо выбирать темплейт для разных типов в селекторе, а выбранность обрабатывать в каждом из них через стиль например
<ListBox x:Name="listBox" VerticalAlignment="Top"
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<StackPanel.Style>
<Style TargetType="StackPanel">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsSelected}"
Value="True">
<Setter Property="Background" Value="Orange" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Text="Name:" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
K>>SelectTemplate вызывается до приcвоения нового значение свойства SelectedItem
K>>нужно в item соотв. свойство завести — выбран он или нет, выглядит может и избыточно но работать должно
S>Так в ListBoxItem и так есть свойство IsSelected, зачем еще и в данных его заводить?
да, в WPF и это не работает, DataTemplate выбирается только при добавлении элемента(биндинге) коллекции и потом уже на изменение его свойств не реагирует.
тогда в твоем случае надо выбирать темплейт для разных типов в селекторе, а выбранность обрабатывать в каждом из них через стиль например
<ListBox x:Name="listBox" VerticalAlignment="Top"
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<StackPanel.Style>
<Style TargetType="StackPanel">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsSelected}"
Value="True">
<Setter Property="Background" Value="Orange" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Text="Name:" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Re[3]: WPF - DataTemplateSelector для ListBox не работает
Здравствуйте, senglory, Вы писали:
K>>SelectTemplate вызывается до приcвоения нового значение свойства SelectedItem
K>>нужно в item соотв. свойство завести — выбран он или нет, выглядит может и избыточно но работать должно
S>Так в ListBoxItem и так есть свойство IsSelected, зачем еще и в данных его заводить?
да, в WPF и это не работает, DataTemplate выбирается только при добавлении элемента(биндинге) коллекции и потом уже на изменение его свойств не реагирует.
тогда в твоем случае надо выбирать темплейт для разных типов в селекторе, а выбранность обрабатывать в каждом из них через стиль например
K>>SelectTemplate вызывается до приcвоения нового значение свойства SelectedItem
K>>нужно в item соотв. свойство завести — выбран он или нет, выглядит может и избыточно но работать должно
S>Так в ListBoxItem и так есть свойство IsSelected, зачем еще и в данных его заводить?
да, в WPF и это не работает, DataTemplate выбирается только при добавлении элемента(биндинге) коллекции и потом уже на изменение его свойств не реагирует.
тогда в твоем случае надо выбирать темплейт для разных типов в селекторе, а выбранность обрабатывать в каждом из них через стиль например
<ListBox x:Name="listBox" VerticalAlignment="Top"
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<StackPanel.Style>
<Style TargetType="StackPanel">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsSelected}"
Value="True">
<Setter Property="Background" Value="Orange" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Text="Name:" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>