2014-11-05 1 views
1

Big Picture goal: Я хотел бы редактировать модели в окне данных, которое содержит страницы свойств, которые редактируют данную модель. Я хотел бы отметить модели с несколькими интерфейсами, которые они удовлетворяют. Для каждого интерфейса существует связанная с ним модель и вид отображения свойств.Как использовать контейнер для разрешения коллекции видов моделей, связанных с моделью?

То, с чем я борюсь, - это как я могу разрешить выборку моделей свойств страницы свойств из данной модели, которая удовлетворяет 1-N интерфейсам.

Мне было интересно, могу ли я разместить образец модели просмотра модели страницы в контейнере? Я попытаюсь разрешить сборку моделей свойств страницы свойств из контейнера, и контейнер будет использовать фабрику, чтобы правильно генерировать необходимые модели просмотра. Я мог бы передать эту коллекцию viewmodels в окно данных, которое будет использовать ViewModelToViewConverter для создания представлений viewmodels.

Возможно ли зарегистрировать завод с контейнером? Это лучший способ достичь этой цели? Я полагаю, что я мог бы обработать viewmodel окна окна данных, преобразуя модель в коллекцию моделей viewmodels, но это выходит за рамки.

ответ

0

Я думаю, вы можете создать список (ObservableCollection) моделей, которые вы хотите редактировать в основной модели представления. Затем вы создаете ItemsControl с настраиваемым представлением в качестве шаблона данных:

<ItemsControl ItemsSource="{Binding MyModels}"> 
    <ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <myViews:ModelEditorView /> 
    </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Тогда у вас есть этот вид модель, которая автоматически создается для ModelEditorView:

public class ModelEditorViewModel : ViewModelBase 
{ 
    public ModelEditorViewModel(MyModel model /*, other dependency injections here*/) 
    { 
     Argument.IsNotNull(() => model); 

     Model = model; 
    } 

    public MyModel Model { get; private set; } 
} 

Тогда все будет создано для вас автоматически.

+0

Спасибо, это решение, которое я использовал. – Tim