2016-03-17 4 views
1

Моя проблема кажется той, что есть у других, так как я нашел несколько других похожих вопросов (например, WPF - hiding listbox items). В этом конкретном вопросе/ответе я получил больше, чем что-либо еще, что нашел вместе. Проблема, с которой я сталкиваюсь, заключается в том, что когда я реализую DataTrigger, так как он находится в ответе (немного изменен для ListView, а не ListBox), я получаю надлежащее свертывание элемента, но для некоторых вещей моя тема кажется вернулись к умолчанию, вместо того, чтобы использовать мой стиль ModernUI.Как я действительно скрываю ListViewItem без разрушения моей темы?

Вот что я добавил к моему ListView для того, чтобы получить разрушенные элементы по-настоящему быть свернуты:

<ListView.ItemContainerStyle> 
    <Style TargetType="{x:Type ListViewItem}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Visibility}" Value="Collapsed"> 
       <Setter Property="Visibility" Value="Collapsed"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</ListView.ItemContainerStyle> 

Вот пример из пунктов отфильтрованных перед тем добавив выше: Before the <Style/>

(обратите внимание на оранжевый парение элемента, который не должен быть там)

Вот пример из пунктов отфильтрованных после добавляющих выше: After the <Style/>

(обратите внимание на индикаторе парения/выбор теперь как-то синий, и мои текстовые поля больше не размер соответственно)

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

Боковое примечание: Пожалуйста, не просто скажите мне, чтобы использовать фильтр CollectionView для фильтрации. Я провел большую часть своего дня вчера, сражаясь с этим, и из-за использования BindingList<> вместо ObservableCollection<> он просто не будет работать для моей ситуации.

+0

Замечание: Почему вы используете BindingList в WPF? –

+0

Потому что, основываясь на других предложениях, найденных здесь, мой пользовательский класс, пузырящийся в результате изменений через привязку, мог быть реализован с одним событием, в отличие от прыжка через многие обручи, которые я не понял. Я довольно новичок в WPF, поэтому я уверен, что это будет непросто для других, но «BindingList <>» - это решение, которое сработало (и я не создаю его для Silverlight). – Lance

+0

Я не могу помочь в вашем конкретном вопросе, но AFAIK BindingList предназначен для WindowsForms и ObservableCollection для WPF. Я бы сказал, что вы пропустите изменения коллекции, если используете BindingList. –

ответ

2

Проблема здесь состоит в том, что ModernUI структура переопределяет стиль по умолчанию ListViewItem, однако вы подменяют это:

<Style TargetType="{x:Type ListViewItem}"> 

Теперь ваш стиль становится новым по умолчанию стиль для ListViewItem. Чтобы исправить это, используйте атрибут BasedOn для наследуйте стиль ModernUI.

<Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListViewItem}}"> 

Код выше просто наследует стиль по умолчанию ListViewItem (который был переопределён ModernUI).