Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Silverlight模型,视图-视图模型故障_C#_Silverlight_Mvvm_Prism_Viewmodel - Fatal编程技术网

C# Silverlight模型,视图-视图模型故障

C# Silverlight模型,视图-视图模型故障,c#,silverlight,mvvm,prism,viewmodel,C#,Silverlight,Mvvm,Prism,Viewmodel,您好,我正在尝试在ViewModel中创建包含事件的Silverlight页面,但我不知道如何在页面加载事件中执行此操作(我找不到正确的命令)。 我想将这个:Loaded=“RadPane\u Loaded”绑定到Loaded={Binding RadPane\u Loaded} 视图: 视图模型: namespace SilverlightTest.Modules.Tree { public class OutlookBarViewModel : DependencyObject

您好,我正在尝试在ViewModel中创建包含事件的Silverlight页面,但我不知道如何在页面加载事件中执行此操作(我找不到正确的命令)。 我想将这个:Loaded=“RadPane\u Loaded”绑定到Loaded={Binding RadPane\u Loaded}

视图:

视图模型:

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...? */


     }
}
public void GridViewSelectionChangedCommandExecute(SelectionChangeEventArgs e)
{  }
  • 从Blend SDK向项目程序集添加Microsoft.Expression.Interactions和System.Windows.Interactivity(如果使用Prism,则包括这些程序集)
  • 向视图模型添加命令,f.i.InitializeCommand
  • 在XAML中:

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

  • 因此,当加载的事件引发时,将调用viewmodel的命令InitializeCommand

    我发现有一种非常简单的方法,可以使用Caliburn库将EventArgs发送到ViewModel。(http://caliburnmicro.codeplex.com/)

    xmlns:caliburn=“clr命名空间:caliburn.Micro;assembly=caliburn.Micro” xmlns:i=”http://schemas.microsoft.com/expression/2010/interactivity"


    不过,我想知道viewmodel现在是否对视图了解得太多。

    嘿,弗拉基米尔,非常感谢。这对我来说是非常有用的信息:D这是标准的Silverlight方式吗?还是有其他的选择?我想知道这是因为这个功能不在标准的Silverlight程序集中。是的,如果你想使用MVVM模式,这是标准的方式。这些程序集将在Silverlight 5的核心中提供,但现在它们随Blend SDK一起提供
                <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>
    
    public void GridViewSelectionChangedCommandExecute(SelectionChangeEventArgs e)
    {  }