У вас есть несколько вариантов. Как уже упоминал Брайан, селектор шаблонов данных определенно может работать, хотя я решил, что они часто бывают лишними. Возьмем, к примеру, ваш пример - если вы хотите связать видимость элемента с выделением в ComboBox
, я бы предпочел вместо него ValueConverter
. Передайте ComboBox.SelectedItem
в Converter
и верните значение Visibility:
public class MyObjectToVisibleOrCollapsed : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is MyObject)
{
var myObject = (MyObject)value;
if (myObject.SomeState)
{
return Visibility.Visible;
}
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Теперь в ваших Window.Resources создайте экземпляр ValueConverter
и привяжите элемент к ComboBox.SelectedItem
, используя экземпляр ValueConverter
:
<local:MyObjectToVisibleOrCollapsed x:Key="myObjectToVisibleOrCollapsed"/>
<DataTemplate x:Key="MyTemplate">
<TextBlock Text="{Binding Path=myText}"
x:Name="MyText"
Visibility="{Binding ElementName=MyComboBox, Path=SelectedItem, Converter={StaticResource myObjectToVisibleOrCollapsed}, Mode=Default}" />
</DataTemplate>
И, конечно, вы можете повторно использовать ValueConverter
для всех элементов в DataTemplate
(и, если их много, подход выбора шаблонов данных становится более желательным).
[Отказ от ответственности: приведенный выше код был хеширован из памяти и не проверен - возможно, потребуется небольшая настройка]