我正在尝试使用 ValueConverter 。所有绑定(包括 DataGrid 内容)都正常工作,但我无法将值转换器应用于 DataGridColumns,也不能应用于其他字段,因为它的方法根本没有被调用。
可能有问题的地方可能是我们使用Reactive UI作为 MVVM 框架,因此它可能是问题的根源。我正在通过响应式 UI 绑定设置 DataGrid 的项目源。
但我尝试在视图上设置类似的内容:
public partial class OrderTimeSheetUserControl : OrderTimeSheetBaseUserControl
{
public OrderTimeSheetUserControl()
{
this.DataContext = ViewModel; // Set data context in case it may have helped (but it did not)
InitializeComponent();
}
}
PS:我尝试过内置的 BooleanToVisibilityConverter,以及通过继承 MarkupExtension 类和略有不同的使用方法编写我的转换器。(带有 MarkupExtension 的 IValueConverter)
值转换器如下:
[ValueConversion(typeof(bool), typeof(Visibility))]
public class BoolToCollapsedVisibilityValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool == false)
{
throw new NotSupportedException($"Conversion from {value.GetType().Name} is not supported by {nameof(BoolToCollapsedVisibilityValueConverter)}.");
}
var boolValue = (bool) value;
return boolValue ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
它在 XAML 页面中的用法:
<userControls:OrderTimeSheetBaseUserControl.Resources>
<wpfValueConverters:BoolToCollapsedVisibilityValueConverter x:Key="Conv" />
<DataGrid>
<DataGrid.Columns>
<DataGridComboBoxColumn Visibility="{Binding BackPayCategoryVisible, Converter={StaticResource Conv}}" Header="Backpay Cat."/>
</DataGrid.Columns>
</DataGrid>
xaml.cs 中 DataGrid 的 ItemsSource 的响应式 UI 绑定:
this.OneWayBind(ViewModel,
viewModel => viewModel.Employees,
view => view.PersonsInOrderDataGrid.ItemsSource)
.DisposeWith(disposable);
因此,所有属性都已正确绑定,但值转换器不起作用。
FFIVE
相关分类