假设我有一个看起来像这样的对象图(这不是我的真实对象):
CaseFile
- Sections (collection)
- Documents (collection of type:Document)
- Other Node
- Other Children (collection)
- More children (collection)
我想在“TreeView”中呈现这些数据。我正在使用
HierarchicalDataTemplate
's 来管理每个子对象的显示方式,这很好用。<HierarchicalDataTemplate DataType="x:Type local:Document">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding FileName, Converter="MyResourceConverter"}" />
<TextBlock Foreground="Red" Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
我想为不同的对象显示特殊的图标。这就是它变厚的地方:我可以显示某些类或类型的静态图像,我什至可以显示基于实例化类的元数据的图标。我正在使用'
IValueConverter
' 这样做,效果很好。class MyResourseConverter : IValueConverter
{
private static readonly IImageManager _imageManager =
new CachedImageManager(new SystemImageManager());
public MyResourceConverter() // place where I'd like to inject this IImageManager
{
}
//... IValueConverter Properties
//... That uses the _imageManger
}
我的 '
IValueConverter
' 有依赖项,我不知道如何注入(inject)这些依赖项,我已经到处搜索以了解如何解决这个问题。我见过的最接近解决此问题的方法是使用类似'ServiceLocator
' inline 在类里面,但这对我来说似乎是一种反模式,它首先完全违背了 IoC 的目的。还有其他方法可以让我的子图对象显示或'
convert
' 他们的数据变成了 ' ImageSource
' 没有转换器?
最佳答案
您可以使用x:Arguments在 XAML 中通过转换器构造函数注入(inject)依赖项。
关于c# - 将对象属性转换为不同的可视对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27813724/