【发布时间】:2016-06-08 04:04:12
【问题描述】:
我是 WPF 新手。
我想知道如何将我的 IUnityContainer 类依赖注入到仅在 XAML 中具有代码的 ViewModel。
小更新:
有一个类名为:LiveVideoTileControl - 我已将容器添加到它。
我有一个带有特定转换器的窗口:
<UserControl x:Class="Driver.Test.Views.LiveVideoTileControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ViewModels="clr-namespace:Driver.Test.ViewModel"
xmlns:Driver="clr-namespace:Driver.Test.DriverRelated"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300" >
<UserControl.Resources>
<Driver:CameraToMediaElementConverter x:Key="converter"/>
</UserControl.Resources>
<ScrollViewer>
<Grid>
<ContentControl Content="{Binding CameraEntity,Converter={StaticResource converter}}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center">
</ContentControl>
</Grid>
</ScrollViewer>
</UserControl>
如何将容器注入“CameraToMediaElementConverter”类?
class CameraToMediaElementConverter : IValueConverter
{
public object Convert(object cameraEntity, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((cameraEntity as ICameraEntity) != null)
{
return DriverWrapper.GetControlForCamera((ICameraEntity)cameraEntity);
}
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
【问题讨论】:
-
您必须手动进行(FactoryPattern 或任何您喜欢的方式) - 这篇文章:slickthought.net/post/2011/01/17/… 展示了如何使用纯 XAML 注入属性(但仍需手动)
-
我想我可以将我的 2 个参数包装在 1 中并将其作为对象发送到 Convert(object wrapperObj) .. 而不是在 Convert(..) 中发送 1 个对象
-
不 - 这会让你的代码无法阅读 - 你看过我链接的文章吗?在 XAML 中为
converter设置一个属性似乎是一个不错的选择 IMO -
这篇文章是在讨论将其注入到 ViewModel,而不是注入到我在视图模型中使用的静态转换器类。
-
这种情况下的区别在哪里?您将一个声明为 DataContext,另一个声明为 Resource
标签: c# wpf converter unity-container