我在列表框项模板中绑定可见性与父对象中的属性时遇到问题。下面是自定义 xaml 样式模板中的一个小片段:
<!-- 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正确绑定到列表框项样式?
不能直接绑定到数组:
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>