выбирается во втором списке так же, как и в первом - PullRequest
0 голосов
/ 15 марта 2012

У меня есть сетка с 2 списками.Представления списков одинаковы (только источник элементов отличается для других элементов c) dateatemplate = Stackpanel с 1 меткой и другой сеткой.Теперь я хочу, чтобы сетка (внутри стековой панели, которая находится внутри таблицы данных) была ТОЛЬКО видимой, если выбран элемент (Метка).Я попробовал это с этим кодом (который я вставил в табличку с данными списка просмотра:

<StackPanel>
<Label content={binding blabla} />
<Grid Visibility="{Binding IsSelected,RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}, Mode=FindAncestor}, Mode=OneWay,  Converter={StaticResource BooleanToVisibilityConverter}}" >
...random labels etc...
</Gird>
</StackPanel>

Это работает! ОДНАКО, если я выбираю элемент во втором представлении списка (и только во втором), то первый такжепоказывает эту сетку (на том же «уровне элемента»). (Так, например, во 2-м просмотре списка я выбираю 3-й элемент (метку), затем сетка отображается на 3-м элементе 2-го просмотра списка, но сетка 3-го элементапоказать в первом просмотре списка !!!!)

Я думаю, что это связано с относительным источником, но я не могу найти ответ. Надеюсь, вы, ребята, можете мне помочь.

1 Ответ

1 голос
/ 15 марта 2012

То, что у ListBox нет фокуса, не означает, что элемент не выбран, и я подозреваю, что SelectedItem или SelectedIndex связаны с одним и тем же свойством в обоих ListViews, что делаетListViewItem.IsSelected синхронизируется между двумя ListViews

Я бы предложил сделать условие видимости вашей таблицы основанным на 2 свойствах вместо 1: ListViewItem.IsSelected - true, И если ListViewItem.IsKeyboardFocusWithin установлено в True.

Вот пример использования DataTrigger

<Style TargetType="{x:Type Grid}" x:Key="GridStyle">
    <Setter Property="Visibility" Value="Collapsed" />
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Value="True" Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}" />
                <Condition Value="True" Binding="{Binding Path=IsKeyboardFocusWithin, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}" />
            </MultiDataTrigger.Conditions>
            <Setter Property="Visibility" Value="Visible" />
        </MultiDataTrigger>
    </Style.Triggers>
</Style>

На самом деле, я думаю, IsKeyboardFocusWithin установит элементы как выбранные, поэтому, возможно, вам нужно использовать только IsKeyboardFocusWithinвместо IsSelected

...