0

ここで私の髪を引き裂く !私はこの型コンバーターを持っています:

class CouponBarcodeToVisibilityConverterColumn : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (DesignerProperties.IsInDesignMode)
        {
            if ((string)parameter == "123456")
            {
                return Visibility.Visible;
            }
            return Visibility.Hidden;
        }

        if (value == null)
        {
            return Visibility.Visible;
        }

        var barcodesWanted = ((string)parameter).Split(System.Convert.ToChar("_"));
        var actualBarcode = (string)value;

        return barcodesWanted.Any(barcodeWanted => barcodeWanted == actualBarcode) ? Visibility.Visible : Visibility.Hidden;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
}

次の Resources セクションを持つ UserControl があります。

<UserControl.Resources>
        <converters:CouponBarcodeToVisibilityConverterColumn x:Key="CouponBarcodeToVisibilityConverter1"/>
</UserControl.Resources>

Bet というモデルがあります。次のようになります。

public class Bet : INotifyPropertyChanged
{
    //Lots of other stuff

    private string _barcode;

    public string Barcode
    {
        get { return _barcode; }
        set
        {
            if (value == _barcode) return;
            _barcode = value;
            OnPropertyChanged("Barcode");
        }
    }

    //Lots of other stuff
}

ユーザー コントロールの DataContext である ViewModel には、Observable Collection of Bet があります。ユーザー コントロールに戻ると、スタック パネルがあり、そのデータ コンテキストは前述の Observable Collection です。

スタック パネル内に DataGrid があります。ItemsSource プロパティは単に{Binding}であり、ツリーのバインディングをそのまま延期します。

私の DataGrid 内には、次の列があります。

<DataGridCheckBoxColumn x:Name="IsEwColumn" Binding="{Binding Wagers[0].IsEw,UpdateSourceTrigger=PropertyChanged}" Header="Each Way" Visibility="{Binding Path=Barcode, Converter={StaticResource CouponBarcodeToVisibilityConverter1}, ConverterParameter=123456}" Width="Auto"/>

バインディングの他の要素は完全に機能します (チェックボックスは、本来あるべきときにチェックされます) が、私の型コンバーターはそうではありません。ブレークポイントもヒットしません。Bet内の Barcode プロパティは、間違いなく 123456 です。

私は何を逃したのですか?

4

1 に答える 1

1

ここにあるのは、データ グリッドのアイテム ソースに対する賭けのリストです。考えてみれば

Bet1 は、型コンバーターを介して渡されると、可視と評価される可能性があります。Bet2 は、型コンバーターを介して渡されると、可視と評価される可能性があります。Bet3 は、型コンバーターを介して渡されると、折りたたまれていると評価される可能性があります。

どのようにしてデータ列が同時に表示され、折りたたまれるのでしょうか。

リストに全体的な変数があるか、それがバインドできる何かがない限り、そのような可視性にバインドすることはできません。

于 2013-04-09T17:12:35.683 に答える