我正在编写一个 MAUI 应用程序。我正在尝试使用转换器。但由于某种原因,转换器被调用两次,这导致应用程序崩溃。这是代码:
xaml:
<Picker Title="Choose Tile Thickness..."
ItemsSource="{Binding TileThicknessesMetric}"
ItemDisplayBinding="{Binding Value}"
SelectedItem="{Binding SelectedTileThickness}"
IsVisible="{Binding SelectedUnit, Converter={converters:SelectedUnitToBoolShowMetricConverter}, Mode=TwoWay}"
Style="{StaticResource PickerStyle}"
Grid.Row="2" Grid.Column="1" />
转换器:
class SelectedUnitToBoolShowMetricConverter : IValueConverter, IMarkupExtension
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((Unit)value).Code == UnitCode.Metric;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
public object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
正如我提到的,Convert() 被调用了两次,第二次值为 null,这会导致空引用异常。我不明白为什么第二次调用它。 相同的代码在 Xamarin.Forms 应用程序中按预期工作。
不完全回答这个问题,但对于任何可能在此问题上得到帮助的人:
wpf Convert 和 ConvertBack 函数与 DataGrid 自动生成功能一起使用时可能会冲突并过载您的应用程序,即使您关闭该功能,因此当您想要使用 Convert/ConvertBack 时,应使用 listView (或具有 gridView 模式的列表视图)