Модель Silverlight, вид - Проблемы с ViewModel - PullRequest
0 голосов
/ 10 апреля 2011

Привет. Я пытаюсь создать страницу Silverlight с событием во ViewModel, но я не понимаю, как это сделать в событии загрузки страницы (я не могу найти правильную команду).Я хотел бы привязать это: Loaded = "RadPane_Loaded" к Loaded = {Binding RadPane_Loaded}.

View:

namespace SilverlightTest.Modules.Tree
{
    public partial class OutlookBarView : RadPane
    {
        public OutlookBarView(OutlookBarViewModel model)
        {
            InitializeComponent();
            DataContext = model;
        }
    }
}

ViewModel:

namespace SilverlightTest.Modules.Tree
{
    public class OutlookBarViewModel : DependencyObject
    {
        private IEventAggregator _eventAggregator;
        private IMainPage _shell;
        private IUnityContainer _container;

        public OutlookBarViewModel(IEventAggregator eventAggregator, IMainPage shell, IUnityContainer container)
        {
            _container = container;
            _eventAggregator = eventAggregator;
            _shell = shell;

        }


        This is what I would normally do to bind something to a control.

public ICommand ExampleCommand
        {
            get { return (ICommand)GetValue(ExampleCommandProperty); }
            set { SetValue(ExampleProperty, value); }
        }

        /* Here I'd like to bind the page load event but I don't understand how...? */


     }
}

Ответы [ 2 ]

2 голосов
/ 10 апреля 2011
  1. Добавьте в свой проект сборки Microsoft.Expression.Interactions и System.Windows.Interativity из Blend SDK (если вы используете Prism, эти сборки включены).
  2. Добавление команды для просмотра модели, f InitializeCommand
  3. И в XAML:

    <RadPane>
      <i:Interaction.EventTriggers>
        <i:EventTrigger EventName="Loaded">
            <i:InvokeCommandAction Command={Binding InitializeCommand}/>
        </i:EventTrigger>
      </i:Interaction.EventTriggers>
    </RadPane>
    

Таким образом, команда вашего Viewmodel InitializeCommand будет вызываться при возникновении события Loaded.

0 голосов
/ 05 мая 2011

Я обнаружил, что существует очень простой способ отправить EventArgs в ViewModel с библиотекой Caliburn. (http://caliburnmicro.codeplex.com/)

XMLNS: Caliburn = "CLR-имена: Caliburn.Micro; сборка = Caliburn.Micro" XMLNS: я = "http://schemas.microsoft.com/expression/2010/interactivity"

            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Loaded">
                    <i:InvokeCommandAction Command="{Binding GridViewLoaded}"/>
                </i:EventTrigger>
                <i:EventTrigger EventName="SelectionChanged">
                    <caliburn:ActionMessage MethodName="GridViewSelectionChangedCommandExecute">
                        <caliburn:Parameter Value="$eventArgs"></caliburn:Parameter>
                    </caliburn:ActionMessage>
                </i:EventTrigger>
            </i:Interaction.Triggers>

ViewModel:

public void GridViewSelectionChangedCommandExecute(SelectionChangeEventArgs e)
{  }

Мне интересно, однако, знает ли модель представления слишком много о представлении.

...