Silverlight: триггерная функция ViewModel в коде позади - PullRequest
1 голос
/ 16 февраля 2011

У меня есть небольшая проблема с моим приложением Silverlight и использованием шаблона MVVM.

В моем представлении у меня есть DataGrid.ItemsSource обычно привязан к ViewModel, но в моем конкретном случае мне нужно, чтобы столбцы были динамическими, и моя коллекция элементов состоит из словаря для каждого элемента, поэтому у меня нет свойств класса для отображения.Мое решение состояло в том, чтобы сгенерировать все это в заднем коде, поскольку фактический дизайн DataGrid не имеет ничего общего с моей ViewModel.Это было единственное решение, о котором я мог подумать, поскольку столбцы не могут быть привязаны к данным.

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

Могу ли я сделать так, чтобы мой код слушал ViewModel?

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

У меня такое ощущение, что вы что-то путаете.

По вашему вопросу, я думаю, вы можете решить его, имея событие во ViewModel. Подпишитесь на это событие в событии view_Loaded вашего представления и вызовите функцию codebehind в обработчике.

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

0 голосов
/ 15 апреля 2011

Я понимаю, что вы имеете в виду, когда-то нам приходилось делать то же самое, генерируя случайные столбцы, которые представляют собой PIA в silverlight, потому что вам нужен какой-то объект, имеющий динамический набор свойств.Вы нашли решение для словаря.То, что я хотел бы предложить, что само по себе не самое чистое решение, но оно более чистое, чем откладывание кода в коде, - это добавить это в конвертер.Затем привяжите коллекцию к элементу источника элемента управления элементами, а затем, когда свойство списка изменилось, вы соберете сетку данных в конвертере.

small example:

<ItemsControl Grid.Row="1" ItemsSource="{Binding theListOfEntities, Converter={StaticResource theconverter}}"/>
...