Dav*_*vid 1 data-binding wpf binding visibility contentpresenter
我有以下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>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它本质上是一个文本块,其内容绑定到一个名称,以及两个内容提供者,它们的可见性绑定到源类上的几个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; }
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,与Visibility对象的绑定从未发生过.与Name字符串的绑定确实发生了,我已经验证了(在视觉上和扩展并在getter中放置断点),但是当我在CollapserVisibility和ExpanderVisibility对象的getter中放置断点时,这些断点甚至都没有得到击中.为什么是这样?我也没有在Visual Studio的输出窗口中收到任何绑定错误,这进一步让我感到困惑,因此它就好像绑定设置正确一样.
我不允许绑定ContentPresenter的Visibility属性吗?我也尝试将Visibility绑定移动到数据模板中的"网格"对象(在XAML中),但无济于事......它不起作用.
我绑定有什么问题?谢谢你的帮助.
如果您将其更改ContentPresenter为a ContentControl它的工作原理(因为它绑定到您的可见性属性 - 我忽略了您的VM不通知更改的事实):
<ContentControl x:Name="ExpanderPresenter" ContentTemplate="{StaticResource ExpanderTemplate}" Visibility="{Binding ExpanderVisibility}" />
<ContentControl x:Name="CollapserPresenter" ContentTemplate="{StaticResource CollapserTemplate}" Visibility="{Binding CollapserVisibility}" />
Run Code Online (Sandbox Code Playgroud)
我真的无法解释为什么会这样,除了ContentPresenter应该在a的模板中使用的事实ContentControl.但是,对我来说,它应该仍然有用.我认为这需要一些基于Reflector的侦察来解决这个问题.
| 归档时间: |
|
| 查看次数: |
2437 次 |
| 最近记录: |