我有一个Observable ViewModels集合,它绑定到AvalonDock的LayoutItemTempate。当用户从提取的列表中打开问题时,它会在可观察集合中创建一个新的ViewModel。结果创建了一个新文档,但它是新文档,不使用集合中的ViewModel。
我尝试使用转换器,但似乎根本没有使用转换器。有没有人知道另一种选择?甚至可能是代码隐藏解决方案?
以下是主要的XAML代码段。 。
<Window.Resources>
<pconv:IProblemInfoToFreeResponseVMConverter x:Key="FreeResponseToVM" />
</Window.Resources>
. . . { some lines down } . . .
<dock:DockingManager.LayoutItemTemplateSelector>
<selector:LayoutItem>
<selector:LayoutItem.ProblemEditViewTemplate>
<DataTemplate>
<problem:FreeResponseEdit
DataContext="{Binding SelectedProblem,
Converter={StaticResource FreeResponseToVM}}" />
</DataTemplate>
</selector:LayoutItem.ProblemEditViewTemplate>
</selector:LayoutItem>
</dock:DockingManager.LayoutItemTemplateSelector>
我的转换器代码。 。
[ValueConversion(typeof(FreeResponse), typeof(FreeResponseEditViewModel))]
public class IProblemInfoToFreeResponseVMConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is FreeResponse)
return new FreeResponseEditViewModel(value as FreeResponse);
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is FreeResponseEditViewModel)
return (value as FreeResponseEditViewModel).ProblemItem;
return value;
}
}
答案 0 :(得分:2)
将ItemSource
绑定到FreeResponseEditViewModel堆栈,DataTemplate创建FreeResponseEdit
,然后自动将FreeResponseEditViewModel
作为DataContext注入到视图中。
<dock:DockingManager.LayoutItemTemplateSelector>
<selector:LayoutItem>
<selector:LayoutItem.ProblemEditViewTemplate>
<DataTemplate>
<problem:FreeResponseEdit />
</DataTemplate>
</selector:LayoutItem.ProblemEditViewTemplate>
</selector:LayoutItem>
</dock:DockingManager.LayoutItemTemplateSelector>
完全省略DataContext
。