Silverlight: функция триггера ViewModel в исходном коде

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

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

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

Могу ли я заставить свой программный код слушать ViewModel?


person kenlarsson    schedule 16.02.2011    source источник


Ответы (2)


Такое ощущение, что ты где-то лажаешь.

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

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

person gordanvij    schedule 15.04.2011

Я понимаю, что вы имеете в виду, когда-то нам приходилось делать то же самое, генерируя случайные столбцы, что является PIA в Silverlight, потому что вам понадобится какой-то объект с динамическим набором свойств.

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

небольшой пример:

<ItemsControl Grid.Row="1" ItemsSource="{Binding theListOfEntities, Converter={StaticResource theconverter}}"/>
person Luc Bos    schedule 15.04.2011