Re[3]: WPF - DataTemplateSelector для ListBox не работает
От: ksg71 Германия  
Дата: 03.09.18 10:37
Оценка: 6 (1)
Здравствуйте, 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>
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Отредактировано 03.09.2018 10:38 ksg71 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.