Отрегулируйте свойство видимости представления не работает - PullRequest
5 голосов
/ 04 февраля 2011

У меня странная проблема с привязкой логического свойства к свойству видимости View.

У меня есть «основное» представление, которое содержит множество других представлений, а также различные другие элементы UIE, включая кнопки, TextBoxes, Сетки, StackPanels и некоторые элементы управления telerik.Некоторые элементы управления имеют свою видимость, связанную с логическими свойствами в моей ViewModel, так что когда свойства положительные, они отображаются, а когда отрицательные - свернуты.

<Border Visibility="{Binding IsSectionShown, 
                Converter={StaticResource BoolToVisibilityConverter}}" >

Это прекрасно работает для меня.Очевидно, что я вызвал событие уведомления в установщике IsSectionShown, и видимость элемента управления соответствующим образом скорректирована.

Теперь у меня есть представление, для которого необходимо настроить его видимость.Очевидная реализация:

<vw:ActivityView DataContext="{Binding Activity}" 
                 Visibility="{Binding IsPositive, 
                      Converter={StaticResource BoolToVisibilityConverter}}" />

Не работает!Моя работа заключается в том, чтобы обернуть мой взгляд в StackPanel и настроить видимость StackPanel - и это прекрасно работает:

<StackPanel Visibility="{Binding IsPositive, 
                 Converter={StaticResource BoolToVisibilityConverter}}">
    <vw:ActivityView DataContext="{Binding Activity}" />
</StackPanel>

Есть идеи относительно того, почему это происходит?Обходной путь - это хорошо, но я хотел бы определить пробел в моем понимании.

1 Ответ

2 голосов
/ 04 февраля 2011

Чтобы оба этих параметра работали, свойство IsPositive должно существовать как внутри Activity, так и на один уровень выше в контексте данных, из которого происходит Activity.Но это, вероятно, не то, что вы хотели.Вместо этого вы можете использовать что-то вроде этого, так что видимость исходит из контекста данных, отличного от того, который применяется к самому представлению:

<vw:ActivityView DataContext="{Binding Activity}" 
                 Visibility="{Binding IsPositive, ElementName=ParentElement,
                      Converter={StaticResource BoolToVisibilityConverter}}" />

, где ParentElement - родительский элемент, содержащий vw:ActivityView.

...