我遇到了从嵌套数据模板(ListViewItems)调用的 IValueConverters 的问题。
我有包含其他对象的复杂(列表)对象和对象列表列表(源代码太多,无法全部放在这里)......
除了在更深的嵌套级别上的 IValueConverter 实现之外,一切都很好......
简化和缩短的 XAML:
<Window x:Class="XXXX.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converter="clr-namespace:XXXX.Converter"
Width="800"
Height="600"
Icon="/Images/Icons/Calendar.ico"
Loaded="Window_Loaded"
Style="{StaticResource WindowDefaultStyle}"
WindowState="Maximized">
<Window.Resources>
<!-- <converter:ValueToVisibilityConverter x:Key="ValueToVisibility" /> -->
<converter:PercentageConverter x:Key="PercentFromValue" />
<converter:SubtractionConverter x:Key="SubstractFromValue" />
<converter:SingleTextLineConverter x:Key="inSingleLine" />
<converter:B2VConverter x:Key="B2V" />
</Window.Resources>
<Grid Name="grid_Supplier">
<ListView Name="listview_Product"
Grid.Row="1"
Height="{Binding ElementName=grid_Supplier,
Path=ActualHeight,
Converter={StaticResource SubstractFromValue},
ConverterParameter=60}"
ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window},Path=SuppliersProducts}">
<ListView.ItemTemplate>
<DataTemplate>
<ListView Name="listview_CM"
Width="{Binding ElementName=grid_SupplierProduct,
Path=ActualWidth,
Converter={StaticResource PercentFromValue},
ConverterParameter=80}"
ItemsSource="{Binding CM}">
<ListView.ItemTemplate>
<DataTemplate>
<ListView Name="listview_Comments"
ItemsSource="{Binding Comments}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Comment.DueDate, StringFormat='dd.MM.yyyy'}"
Background="{Binding Status
, 转换器={StaticResource B2V}
}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Window>
如您所见,有 3 个嵌套的 ListView,“第一”级的转换器 (PercentFromValue) 可以正常工作 - 使用绑定和参数...
一旦存在绑定的转换器部分( StaticResource B2V ),我的问题就在下一个嵌套“级别”,在运行时出现空引用异常(没有进一步的解释或嵌套异常信息可用...... - 但尽快由于转换器不见了,所以没有问题......好吧,没有例外,但也没有背景 - 正如所料......)
我试图创建“listview 资源”部分,但也出现了空引用异常(我假设在这种情况下找不到路径的“转换器:”部分。
由于我使用的是 Backgroundworker(gui 上显示的信息是从 9 个以上相关表中收集的),因此无法将 Brush 传递给 gui(从 Dispatcher 继承并导致“DependencySource must be created in the same thread as DependencyProperty”错误) .
现在我正在后台准备所有内容,并且只在与解决方法相同的线程中添加背景画笔,但它很难看......
使用转换器会好得多,但是如何从嵌套数据模板中引用它呢?
非常感谢您的帮助!