Подсказка с ItemsControl не обновляется при изменении DataContext - PullRequest
2 голосов
/ 15 ноября 2011

Я застрял с чем-то похожим на простую привязку mvvm.

У меня есть сетка с всплывающей подсказкой.DataContext из Grid изменяется и должен обновлять значения в textBlock и ItemsControl, помещенных во всплывающую подсказку.Проблема в том, что список внутри всплывающей подсказки не обновляется.Просто для теста я добавил тот же ItemsControl ниже текстового блока.Этот список обновляется без проблем.Вот упрощенный код, который содержит только то, что необходимо (я так думаю).

<Grid DataContext="{Binding SelectedRouting}">
    <StackPanel>
        <TextBlock Text="{Binding ActionDescription}" />
        <ItemsControl ItemsSource="{Binding RoutingActionList}" ItemTemplate="{StaticResource SingleActionTemplate}"/>
    </StackPanel>

    <Grid.ToolTip>
        <ToolTip Style="{StaticResource ActionToolTipStyle}">
            <ItemsControl ItemsSource="{Binding RoutingActionList}" ItemTemplate="{StaticResource SingleActionTemplate}"/>
        </ToolTip>
    </Grid.ToolTip>
</Grid>

Вопрос заключается в следующем: почему сначала обновляется ItemsControl (тот, что в StackPanel), когда изменяется основной массив DataContext, а второй - внутри элемента ItemsControlToolTip нет.Есть идеи или решения?

Ответы [ 3 ]

2 голосов
/ 15 ноября 2011

Посмотрите на answer для этого вопроса, возможно, это то, что вы хотите - WPF Tooltip не обновляет

Кроме того, если вы хотите установить подсказку в подсказке, вы можетеустановите dataContext вашей всплывающей подсказки, и тогда она должна работать -

 <Grid.ToolTip>
        <ToolTip DataContext="{Binding SelectedRouting}" Style="{StaticResource ActionToolTipStyle}">
            <ItemsControl ItemsSource="{Binding RoutingActionList}" ItemTemplate="{StaticResource SingleActionTemplate}"/>
        </ToolTip>
    </Grid.ToolTip>

Так как подсказка не принадлежит визуальному дереву вашего элемента управления, следовательно, изменения не распространяются на него.Поэтому, установив dataContext для всплывающей подсказки, вы сделаете его уведомляемым для PropertyChanges в Datacontext.

1 голос
/ 15 ноября 2011

Моим лучшим предположением будет то, что WPF читает подсказки как часть другого слоя в WPF, поэтому, когда вызывается событие PropertyChange, оно запускается только на основном слое

Попробуйте либо указать DataContext для объекта ToolTip, чтобы он получал оповещения об уведомлениях PropertyChange, либо попробовать вообще удалить его

<Grid.ToolTip>
    <ToolTip DataContext={Binding RoutingActionList}" Style="{StaticResource ActionToolTipStyle}">
        <ItemsControl ItemsSource="{Binding }" ItemTemplate="{StaticResource SingleActionTemplate}"/>
    </ToolTip>
</Grid.ToolTip>

Или

<Grid.ToolTip>
    <ItemsControl ItemsSource="{Binding }" ItemTemplate="{StaticResource SingleActionTemplate}"/>
</Grid.ToolTip>
0 голосов
/ 16 ноября 2011

Решение было в ссылке, предоставленной RV1987. Внутри <Grid.ToolTip> не может быть тега <ToolTip>, и это решает проблему, о которой я спрашивал. Во всяком случае, есть небольшая проблема. Удаление тега удаляет также возможность назначения стиля для всплывающей подсказки. Что бы вы ни поместили внутри всплывающей подсказки, видна граница по умолчанию. Присвоив стиль подсказке, у меня был хороший темный фон. Теперь это ушло :( :( Есть идеи по этому поводу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...