我有以下 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>
如您所见,它本质上是一个文本块,其内容绑定到一个名称,以及两个 contentpresenter,它们的可见性绑定到源类上的几个 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; }
}
我遇到的问题是与 Visibility 对象的绑定甚至从未发生过。与 Name 字符串的绑定确实发生了,并且我已经验证了这一点(无论是在视觉上还是通过展开并在 getter 中放置一个断点),但是当我在 CollapserVisibility 和 ExpanderVisibility 对象的 getter 中放置断点时,这些断点甚至永远不会得到打。为什么是这样?我在 Visual Studio 的输出窗口中也没有收到任何绑定错误,这进一步让我感到困惑,所以它的作用就像绑定设置正确一样。
我是否不允许绑定 ContentPresenter 的 Visibility 属性?我还尝试将可见性绑定移动到数据模板(在 XAML 中)中的“网格”对象上,但无济于事......它没有用。
我的绑定有什么问题?谢谢你的帮助。