2

У меня есть наблюдаемая коллекция ViewModels, привязанная к LayoutItemTempate AvalonDock. Когда пользователь открывает проблему из извлеченного списка, он создает новый ViewModel в наблюдаемой коллекции. В результате создается новый документ, но он нов и не использует ViewModel из коллекции.Injecting Instantiated ViewModel для просмотра с AvalonDock

Я попытался использовать конвертер, но он вообще не использует конвертер. Кто-нибудь знает альтернативу? Возможно, даже решение для кода?

Вот основной фрагмент 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; 
    } 
} 

ответ

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 полностью опущен.

+0

Хмм, это введенное свойство DataContext? Или? В настоящее время я работаю с AvalonDock 2.0 с помощью «настройки», аналогичной вашей, но в моем случае «DataContext» не задан после создания представления (проверка использования подписки на событие «Загружено» в представлении). Было бы хорошо, если бы вы могли немного рассказать о том, как вводится «DataContext». Благодарю. –

+0

Nevermind, это действительно «введенное свойство». Возможно, я немного устал при проверке свойства DataContext во время события «Loaded»: D Спасибо за ваш ответ. +1. –