gpt4 book ai didi

mvvm - 使用 AvalonDock 将实例化的 ViewModel 注入(inject)到 View 中

转载 作者:行者123 更新时间:2023-12-03 10:16:17 25 4
gpt4 key购买 nike

我有一个绑定(bind)到 AvalonDock 的 LayoutItemTempate 的 ViewModel 的 Observable 集合。当用户从获取的列表中打开一个问题时,它会在 observable 集合中创建一个新的 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;
}
}

最佳答案

绑定(bind)ItemSource到 FreeResponseEditViewModel 堆栈,DataTemplate 创建 FreeResponseEdit然后注入(inject) FreeResponseEditViewModel自 Action 为 DataContext 进入 View 。

<dock:DockingManager.LayoutItemTemplateSelector>
<selector:LayoutItem>
<selector:LayoutItem.ProblemEditViewTemplate>
<DataTemplate>
<problem:FreeResponseEdit />
</DataTemplate>
</selector:LayoutItem.ProblemEditViewTemplate>
</selector:LayoutItem>
</dock:DockingManager.LayoutItemTemplateSelector>
DataContext完全省略。

关于mvvm - 使用 AvalonDock 将实例化的 ViewModel 注入(inject)到 View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18328737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com