我有以下XAML:遇到問題綁定ContentPresenter的能見度WPF
<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>
正如你所看到的,它本質上是與它的內容綁定到一個名字,並有自己的知名度2個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; }
}
我遇到的問題是,與可見性對象的綁定甚至不會發生。與名稱字符串的綁定確實發生了,並且我已驗證(可視化和擴展並在getter中放置斷點),但是當我在CollapserVisibility和ExpanderVisibility對象的getter中放置斷點時,那些斷點永遠不會甚至會受到打擊。爲什麼是這樣?我也沒有在Visual Studio的輸出窗口中得到任何綁定錯誤,這進一步使我感到困惑,所以它就好像綁定設置正確一樣。
我不允許綁定ContentPresenter的Visibility屬性嗎?我還嘗試將可見性綁定移動到數據模板(在XAML中)的「網格」對象上,但無濟於事......它無法工作。
我的綁定有什麼問題?謝謝你的幫助。
嗯我的印象是,我可以定義ContentTemplate並在這些模板中獲取UI,即使沒有專門定義Content屬性也可以顯示。無論如何,我嘗試從數據模板中取出Grid對象,然後將它們原樣放入UserControl.Resources中,然後我將Content屬性定義爲使用它們作爲靜態資源,並且它可以工作。所以謝謝你的建議。 至於可見性的更新,是的,我知道。我將在這些事情上實現INotifyPropertyChanged,我只是試圖讓綁定工作在第一位。 – David 2010-09-03 16:04:59