Silverlight - определение видимости с использованием нескольких привязок - PullRequest
1 голос
/ 27 декабря 2011

В настоящее время у меня есть простой класс, который содержит различные формы данных, для целей этого вопроса я назову его MyData.Класс обычно создается в xaml в разделе ресурсов контейнера.В настоящее время он имеет DependencyProperty с именем Show, который указывает, должны ли его данные отображаться в пользовательском интерфейсе.Обычно этот ресурс используется для создания шаблона TextBlock для отображения данных и связывания Show с Visibility с помощью конвертера.Само значение Show обычно берется из другого DependencyProperty (обычно в ViewModel для реализаций MVVM).У меня есть пример, показанный ниже.

<navigation:Page.Resources>
    <ViewModel x:Name="MyModel"/>
    <MyData Data="Some Sample Data" Show="{Binding ModelValue, ElementName=MyModel}"/>
    <DataTemplate>
        <TextBlock Text={Binding Data} Visibility="{Binding Show, Converter={StaticResource BoolToVisibilityConverter}}"/>
    </DataTemplate>
</navigation:Page.Resources>

Сценарий выше, очевидно, является упрощенной версией того, над чем я сейчас работаю, но в настоящее время он работает отлично.Однако мне нужно разрешить нескольким привязкам влиять на видимость данных.Чтобы уточнить, если и только если все значения верны, данные должны быть показаны.Итак, MyData xaml сверху выглядел бы так:

<MyData Data="Some Sample Data">
    <MyData.Show>
        <AnotherClass Value="{Binding ModelValue1, ElementName=MyModel}"/>
        <AnotherClass Value="{Binding ModelValue2, ElementName=MyModel}"/>
    </MyData.Show>
</MyData>

Моей первой мыслью было сделать Show ObservableCollection<bool>, но он не отслеживает изменения значений своих элементов., только если сами предметы меняются.Когда «ModelValue1», например, изменится с true на false, событие CollectionChanged коллекции не будет вызвано.Итак, мне нужен способ использовать несколько привязок для определения видимости чего-либо.

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

1 Ответ

0 голосов
/ 27 декабря 2011

Я думаю, что ваша идея с ObservableCollection<bool> может действительно работать нормально, но с небольшой поправкой. Я хотел бы создать что-то вроде ObservableCollection<SomeBoolEncapsulation>, где SomeBoolEncapsulation реализует INotifyPropertyChanged. Когда значение внутреннего буфера SomeBoolEncapsulation изменяется, просто изменяется свойство поднимать. Когда вы получаете событие CollectionChanged от ваших ObservableCollection обработчиков присоединения / отсоединения к PropertyChanged элементов коллекции, вы узнаете, когда изменяются значения bool. Затем при связывании со свойствами bool viewmodel используйте конвертер, который будет инкапсулировать bool из VM в SomeBoolEncapsulation. Надеюсь, это поможет.

...