为什么我的类型转换器不工作

时间:2013-04-09 16:47:19

标签: c# wpf xaml type-conversion

在这里撕扯我的头发!我有这种类型转换器:

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;
    }
}

我有一个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 Bet of Bet。回到我的用户控件,我有一个堆栈面板,其数据上下文是前面提到的Observable Collection。

在Stack Panel中我有一个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"/>

绑定的另一个元素完美地工作(只要它应该是复选框,但是我的类型转换器不是。)断点甚至没有被击中。 投注内的条形码属性肯定等于123456。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

这里有一个数据网格项目来源的投注列表。 如果你考虑一下

当通过类型转换器传递时,Bet1可以评估为可见。 当通过类型转换器传递时,Bet2可以评估为可见。 当通过类型转换器传递时,Bet3可以评估为折叠。

如何同时显示和折叠数据列。

除非你在列表上有一个整体变量或它可以绑定的东西,否则你不能绑定到那样的可见性。