У меня есть следующий XAML:
<UserControl.Resources>
<DataTemplate x:Key="ExpanderTemplate">
<Grid>
<Rectangle Stroke="Black" StrokeThickness="1" Width="10" Height="10" Fill="White" />
<Rectangle Stroke="Black" StrokeThickness="1" Width="6" Height="1" Fill="Black" />
<Rectangle Stroke="Black" StrokeThickness="3" Width="2" Height="6" Fill="Black" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="CollapserTemplate">
<Grid>
<Rectangle Stroke="Black" StrokeThickness="1" Width="10" Height="10" Fill="White" />
<Rectangle Stroke="Black" StrokeThickness="1" Width="6" Height="1" Fill="Black" />
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
<Grid>
<ContentPresenter x:Name="ExpanderPresenter" ContentTemplate="{StaticResource ExpanderTemplate}" Visibility="{Binding ExpanderVisibility}" />
<ContentPresenter x:Name="CollapserPresenter" ContentTemplate="{StaticResource CollapserTemplate}" Visibility="{Binding CollapserVisibility}" />
</Grid>
</StackPanel>
</Grid>
Как вы можете видеть, это, по сути, текстовый блок, содержимое которого связано с именем, и два объекта contentpresenters, видимость которых связана с парой объектов Visibility в исходном классе. Исходный класс выглядит так:
public class MyViewModel
{
public string Name { get; set; }
public Visibility CollapserVisibility
{
get
{
if (IsExpandable && IsExpanded)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
}
public Visibility ExpanderVisibility
{
get
{
if (IsExpandable && !IsExpanded)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
}
public bool IsExpanded { get; set; }
public bool IsExpandable { get; set; }
}
Проблема, с которой я сталкиваюсь, заключается в том, что привязки с объектами видимости никогда не происходят. Связывание со строкой имени происходит , и я проверил это (как визуально, так и расширив и поместив точку останова в геттер), но когда я ставил точки останова в геттеры объектов CollapserVisibility и ExpanderVisibility эти контрольные точки никогда даже не получают удар. Почему это? Я также не получаю никаких ошибок привязки в окне вывода Visual Studio, что еще больше сбивает меня с толку, поэтому он действует так, как будто привязка установлена правильно.
Разрешено ли мне связывать свойство Visibility ContentPresenter? Я также попытался переместить привязки видимости на объекты «Grid» в шаблонах данных (в XAML), но безрезультатно ... это не сработало.
Что не так с моим переплетом? Спасибо за любую помощь.