【问题标题】:Silverlight 4 MVVM DataGrid AND Child Window Pass Data back to Parent WindowSilverlight 4 MVVM DataGrid 和子窗口将数据传回父窗口
【发布时间】:2011-04-30 00:25:24
【问题描述】:

我需要一些帮助。我有一个 Silverlight 应用程序,父窗体有一个搜索按钮,单击该按钮时会加载一个 ModalDialog,它有 3 个文本框、两个按钮(用于搜索和重置)和一个 DataGrid(telerik gridview,但我可以将其更改为任何网格,所以不是问题)。我在其中一个按钮上输入搜索条件,比如姓氏,所有具有该特定姓氏的记录都会加载到网格中。我需要能够在网格上选择一行,并且这样做了,所选行的详细信息应该在父窗口上的控件上更新(父窗口上没有网格,它就像一个数据输入表单)。我正在使用 MVVM。如何在保持 MVVM 模式的同时实现这一目标?我刚刚看到很多关于将数据从父级传递给子级的内容,在子级到父级/调用窗口中没有。

任何帮助,以及一些简单的代码示例,将不胜感激。搞了整整3天,还没搞清楚。

弗朗西斯。

【问题讨论】:

    标签: silverlight mvvm datagrid


    【解决方案1】:

    我在 Mvvm light 工具包中使用消息传递完成了这项工作。它使用一种叫做“PubSub”的东西,意思是“发布消息,订阅消息”

    我在模态窗口的 GridView 中使用了一个命令。这是 XAML:

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <cmd:EventToCommand Command={Binding ItemSelectedCommand} />
        </i:EventTrigger>
    </i:Interaction.Triggers>
    

    根据您使用的 MVVM 工具包的风格(如果有),语法可能会有所不同。就我而言,正如我所说,MVVM 灯。最终,我使用 iCommand 接口将此命令传递给我的视图模型。就我而言,cmd 引用指向 Galasoft.MvvmLight.Command:

    xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;Assembly=GalaSoft.MvvmLight.Extras.SL4"
    

    在我的子窗口的 ViewModel 中,我注册了命令,当它被触发时,我调用了这一行:

    Messenger.Default.Send<TSMVVM.Model.WorkOrders>(SelectedWorkOrder);
    

    这一行通过 SelectedWorkOrder 发布(发送)WorkOrders 类型的消息(这是我的应用程序中的模型类)。这行代码位于一个命令中,该命令在我的 gridview 的 SelectionChanged 事件中触发。示例代码是:

    _ItemSelectedCommand = new RelayCommand(WorkOrderSelected);
    
    private void WorkOrderSelected() 
    {
        Messenger.Default.Send<TSMVVM.Model.WorkOrders>(SelectedWorkOrder);
    }
    

    在我的父窗口中,在构造函数中,我有这个:

    Messenger.Default.Register<TSMVVM.Model.WorkOrders>(this, SetWorkOrder);
    

    此行注册(或订阅)WorkOrders 类型的消息。每当通过我的应用程序发送 WorkOrder 类型的消息时,它都会调用一个函数:SetWorkOrder,如下所示:

    private void SetWorkOrder(TSMVVM.Model.WorkOrders wo) 
        {
            this.SelectedWO = wo;
        }
    

    我的 DataForm 有一个绑定到 WorkOrders 的 ItemsSource 和一个绑定到 SelectedWO 的 CurrentItem,并使用 TwoWay 绑定进行设置。因此,当我更新 SelectedWO(通过 Mvvm light 工具包的 viewmodelbase 实现 INotifyPropertyChanged)时,DataForm 也会相应更新。

    如果您需要更多信息,请告诉我!

    斯科特

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多