在这里撕扯我的头发!我有这种类型转换器:
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。
我错过了什么?
答案 0 :(得分:1)
这里有一个数据网格项目来源的投注列表。 如果你考虑一下
当通过类型转换器传递时,Bet1可以评估为可见。 当通过类型转换器传递时,Bet2可以评估为可见。 当通过类型转换器传递时,Bet3可以评估为折叠。
如何同时显示和折叠数据列。
除非你在列表上有一个整体变量或它可以绑定的东西,否则你不能绑定到那样的可见性。