Ваши привязки неверны.
В вашем DataTemplate
привязки должны быть:
<DataTrigger Binding="{Binding Path=Tag.IsChecked, RelativeSource={RelativeSource Self}}" Value="False">
<Setter Property="StackPanel.Visibility" Value="Collapsed" />
</DataTrigger>
Здесь RelativeSource
с режимом Self
сообщает механизму привязки, что объект, к которому привязывается объект, является объектом длякакой стиль применяется (например, ваш StackPanel
).PropertyPath
из Tag.IsChecked
говорит механизму привязки искать свойство с именем IsChecked
из объекта, хранящегося в Tag
.
Наконец, привязки в вашем StackPanel
должны быть:
<StackPanel Style="{StaticResource panelStyle}" Tag="{Binding ElementName=btn1}">
<Label Content="Data to panel 1" />
</StackPanel>
Здесь ElementName
создает привязку к другому элементу в логическом дереве.Если вы явно не назначаете никакие свойства в Binding
, как в исходном примере:
Tag="{Binding btn1}"
Указанное значение присваивается свойству Path
.Так что это будет то же самое, что и:
Tag="{Binding Path=btn1}"
Также обратите внимание, что использование Tag
не считается наилучшей практикой, поскольку его тип имеет значение object
и его использование не ограничено, и, следовательно, может принимать любыеколичество различных значений в вашем проекте (что часто затрудняет понимание, особенно при использовании в Templates
, которые расположены далеко от их фактического использования).
Надеюсь, это поможет!