2012-06-08 55 views
0

我在具有父对象属性的listbox-item模板中绑定可见性时遇到问题。下面是从自定义XAML样式模板小片段:Silverlight将可见性绑定到父类属性

<!-- DATA BINDING ITEM TEMPLATE --> 
<StackPanel Orientation="Vertical"> 
    <TextBlock Height="19" 
     .... 
     Text="{Binding InfoTop}"/> 
    <Rectangle Height="1" 
     .... 
     Visibility="{Binding _linesVisibility[0], RelativeSource={RelativeSource AncestorType=my:PatientsList}}"/> 
    <TextBlock Height="19" 
     .... 
     Text="{Binding InfoMiddle}" 
     Visibility="{Binding _linesVisibility[0], ElementName=patientsControl}"/> 
    <Rectangle Height="1" 
     .... 
     Visibility="{Binding _linesVisibility[1]}"/> 
    <TextBlock Height="19" 
     .... 
     Text="{Binding InfoBottom}" 
     Visibility="{Binding _linesVisibility[1]}"/> 
</StackPanel> 

我设法在代码文件分配的ItemsSource到文本值绑定,但我不能绑定的知名度。正如你可以看到我尝试了一些不同的想法,但没有一个工作。

我在我的自定义控件中有公共变量public Visibility[] _linesVisibility = new Visibility[2];。此控件包含具有上述自定义样式的列表框。如何正确绑定我的_linesVisibility到列表框项目样式?

回答

0

不能直接绑定到一个数组:

Visibility="{Binding _linesVisibility[1]}" 

这是行不通的。

您需要绑定到一个属性,你的类需要实现INotifyPropertyChanged

private Visibility backingVariable; 
public Visbilility PublicProperty 
{ 
    get { return backingVariable; } 
    set 
    { 
     backingVariable = value; 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs("PublicVariable")); 
     } 
    } 
} 

它不必是Visibility类型的属性。只要您绑定它可以是任何类型的通过返回Visibility转换器:

public class BoolToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     bool visibility = (bool)value; 
     return visibility ? Visibility.Visible : Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     Visibility visibility = (Visibility)value; 
     return (visibility == Visibility.Visible); 
    } 
} 

用法:

Visibility="{Binding SomeBoolean, Converter={StaticResource boolToVisibilityConverter}}" 

,其中转换器宣布XAML这样的:

<UserControl.Resources> 
    <globalConverters:BoolToVisibilityConverter x:Key="boolToVisibilityConverter" /> 
</UserControl.Resources> 
相关问题