MVVM Light: событие привязки к команде в коде позади - PullRequest
0 голосов
/ 30 июля 2010

Я использую MVVM light для привязки событий элементов UIE в моем View к ICommands в моей модели представления, и это работает очень хорошо.

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

Кто-нибудь сделал это или кто-нибудь знает, какк?

Любая помощь приветствуется!


спасибо за ваши ответы и комментарии.Мэтт прав - вопрос в том, как использовать EventToCommand в коде вместо XAMl.Мэтт - мне нужно генерировать элементы управления во время выполнения, потому что до этого момента я никогда не знаю, какими будут элементы управления.Элементы управления находятся на ленте, а лента является контекстно-зависимой, т. Е. Всякий раз, когда изменяется основной вид, элементы управления на ленте меняются вместе с ним и должны быть сгенерированы.

Я нашел решение, используя присоединенные свойствано я все еще хотел бы знать, как (и если) это можно сделать с помощью MVVM Light.

1 Ответ

0 голосов
/ 30 июля 2010

Я не знаю MVVM Light, но при условии, что ваша модель просмотра установлена ​​как DataContext вашего представления, есть как минимум следующие два варианта:

  1. Если вы знаете типдля модели представления, прикрепленной к вашему представлению, вы можете получить доступ к командам модели представления напрямую, и нет необходимости использовать привязку, так как вы можете установить свойство Command напрямую:

    var buttonA = new Button();
    buttonA.Content = "Click me";
    buttonA.Command = (DataContext as TheViewModel).TheCommand;
    
  2. Если вы не знаете тип вашей модели представления, вы можете создать привязку следующим образом:

    var buttonB = new Button();
    buttonB.Content = "Click me too";
    var binding = new Binding("TheCommand");
    binding.Source = DataContext;
    buttonB.SetBinding(Button.CommandProperty, binding);
    
...