Вопрос дизайна MVC - PullRequest
       10

Вопрос дизайна MVC

1 голос
/ 04 июня 2011

У меня есть приложение, использующее MVC. Он имеет холст и сетку свойств. Когда элемент выбран на холсте. Сетка свойств должна отображать свои данные.

Итак, я сделал прослушиватель событий, и когда элемент выбран на холсте, он вызывает событие для контроллера, который передает выбранный элемент в сетку свойств для отображения деталей.

Модель:

Объект предмет, содержащий имя, описание

Контроллер:

protected Controller(object model, FrameworkElement view)
{
    this._model = model;
    this._view = view;
}

public virtual void Initialize()
{
    View.DataContext = Model;
}

Просмотр:

<TextBlock>Status</TextBlock>
<ComboBox ItemsSource="?????"/>

Где вид - это сетка свойств, а модель - выбранный элемент.

Проблема заключается в том, что в сетке свойств есть раскрывающийся список, содержащий значения поиска. Как я могу получить раскрывающиеся значения, учитывая, что тексту данных сетки свойств уже был присвоен выбранный элемент, который не содержит ссылки на этот поиск товар.

Я знаю, что для этого легко использовать собственный код. Но я не хочу нарушать подход MVC.

1 Ответ

2 голосов
/ 04 июня 2011

Привязка к источнику, а не к DataContext, источники предоставляются в виде ElementName, RelativeSource & Source, поэтому вы можете назватьНапример, просмотрите и используйте ElementName, чтобы получить его в качестве источника, тогда Path может быть DataContext.LookupValues, или как называется ваше свойство в модели (- DataContext of View - ваша модель -) называется.


например,

<Window ...
    Name="Window">
    <ItemsControl ItemsSource="{Binding Items}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Name}" />
                    <ComboBox ItemsSource="{Binding ElementName=Window, Path=DataContext.Occupations}"
                            SelectedItem="{Binding Occupation}" />
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

    <!-- ... --->

Редактировать: Ваша проблема в том, что вы не передаете нужную вам информацию, рассмотрите проект, которыйвсе еще предоставляет вам доступ не только к SelectedItem некоторого списка, например,

<Window ...
        Name="Window">
    <ListBox Name="listBox" ItemsSource="{Binding Data}" />
    <ContentControl DataContext="{Binding ElementName=listBox, Path=SelectedItem}">
        <ComboBox ItemsSource="{Binding ElementName=Window, Path=DataContext.Occupations}"
                SelectedItem="{Binding Occupation}" />
    </ContentControl>

    <!-- ... --->

DataContext из ContentControl может быть SelectedItem ListBox, но внутри ComboBox все еще может ссылаться на DataContextокно, которое должно предоставлять необходимую информацию.

Это похоже на мой первый пример, в котором DataContext внутри DataTemplate всегда является элементом коллекции, но вы можете получить доступ к внешним DataContexts, используя источники в ваших привязках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...