Обработка OnLoad (Loaded) в Silverlight с использованием модели MVVM - PullRequest
3 голосов
/ 24 сентября 2010

Я новичок в Silverlight (версия 4) и MVVM, и я не могу понять, как связать команду в XAML с моей ViewModel для события «Loaded» в UserControl.Я могу привязать команду к кнопке, как эта ...

<Button Command="{Binding ShowImageClick}" />

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

<UserControl Loaded="{Binding WindowLoad}">

Есть идеи?

Ответы [ 6 ]

2 голосов
/ 28 сентября 2010

Может оказаться полезным проект Expression Blend Samples на Codeplex:

Образцы смеси для экспрессии

например:.

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <si:InvokeDataCommand Command="{Binding Command}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>
2 голосов
/ 24 сентября 2010

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

Надеюсь, это поможет.

Спасибо, Damian

1 голос
/ 25 сентября 2010

Я фанат ответа Дамиана и обычно использую это решение.

Другой распространенной практикой является InvokeCommandAction или аналогичное поведение в Blend.

0 голосов
/ 15 января 2015

Может быть, это помогает не по-своему, но у меня работает.

Просмотр:

<UserControl Tag="{Binding InitializeMyUserControl}">

Просмотр модели:

public object InitializeMyUserControl
{
    get
    {
        // do some initialization in here
        // bla bla bla
        .. 

        return null;
    }
}

, когда UserControl загружает егопостараюсь получить значение тега.Там вы можете инициализировать вещи.

0 голосов
/ 30 сентября 2010

Я только что обнаружил, что может вызвать утечку памяти, и вернулся к старой школе Loaded. Чтобы проверить это, добавьте финализатор на свой пользовательский элемент управления / страницу и убедитесь, что он вызывается при выполнении GC.Collect ().

0 голосов
/ 25 сентября 2010

Не уверен, является ли это наилучшей практикой или нет, но просто наличие конструктора в классе ViewModel мне кажется вполне подходящим ...

namespace App.ViewModels
{
    public class Main : INotifyPropertyChanged
    {

        public Main()
        {
            // Onload code here
        }
...