ここで私の髪を引き裂く !私はこの型コンバーターを持っています:
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 です。
私は何を逃したのですか?