0

親オブジェクトのプロパティを持つ listbox-item テンプレートの可視性をバインドする際に問題があります。カスタム 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 を割り当てることで Text 値をバインドできましたが、Visibility をバインドできません。ご覧のとおり、いくつかの異なるアイデアを試しましたが、どれも機能しません。

public Visibility[] _linesVisibility = new Visibility[2];カスタム コントロールにパブリック変数があります。このコントロールには、上記のカスタム スタイルのリストボックスが含まれています。_linesVisibility を listbox-item style に適切にバインドする方法は?

4

1 に答える 1

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>
于 2012-06-08T08:20:46.973 に答える