将datagrid ItemsSource从Page加载到Window

时间:2013-04-24 10:41:31

标签: c# wpf xaml wpf-controls

我正在开发一个使用NavigationWindow的应用程序,如下所示:

  1. NavigationWindowMainwindow

  2. Page0.xamlDataGrid's scenairo中有Master Detail(dgMaster和dgDetail)。

  3. Window1.xaml将在dgDetails' ShowDialog()事件设置器中显示为Row_DoubleClick's,如下所示:

                 
        

  4. Code behind

    public void Row_DoubleClick(object sender, RoutedEventArgs e)
    {
        Window1 my_Window = new Window1();
        my_Window.ShowDialog();
    }
    

    对于第2点,代码段如下:

    // on datagrid row selection changed, it should load the ItemsSource in the Window1 datagrid. dg3 is the datagrid in Window1. 
    private void dgDetails_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        this.db = new testDB_Entities();
        string IDMapper = (dgDetails.SelectedItem as Details).Name;
        var Query1 = from a in this.db.Details
                   orderby a.ID == IDMapper
                   select a;
    
        dg3.DataContext = null;
        dg3.DataContext = Query1;
        dg3.Items.Refresh();
    }
    

    以上代码一起显示WindowDialogBox,但DataGrid为空。如何加载ItemsSource活动中DataGrid的{​​{1}}的{​​{1}}?

    我知道这些控件分别属于每个xaml文件,但有一种方法可以显示来自另一个xaml的控件datacontext(无论页面/窗口如何)。

    如果有人不理解这个问题。请让我知道..我会尝试更好地解释它。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,问题是在窗口中加载gridview。 在这种情况下,一个选项是在窗口中创建公共集合(列表),并使用此公共列表设置dg3的项目源。

public List<String> source {set;get}

在构造函数

Window()
{
    \\initialize
    dg3.ItemSources=source;
}

当dgdetail选择发生变化时,在窗口中为dgdetail中的集合指定列表。

private void dgDetails_SelectionChanged(object sender, SelectionChangedEventArgs e)
   {
   this.db = new testDB_Entities();
   string IDMapper = (dgDetails.SelectedItem as Details).Name;
   var Query1 = (from a in this.db.Details
               orderby a.ID == IDMapper
               select a).ToList();

my_Window.source =查询1;

   }

答案 1 :(得分:1)

您正在使用选择更改事件,但您正在使用ShowDialog()打开window.xaml,

ShowDialog()将锁定页面,因此无法更改选择,

如果您正在使用ShowDialog()并希望在对话框中显示,为什么不通过Paramater(我认为它是:

string IDMapper = (dgDetails.SelectedItem as Details).Name

到窗口的构造函数?

public void Row_DoubleClick(object sender, RoutedEventArgs e)
{

 string IDMapper = (dgDetails.SelectedItem as Details).Name;
 Window1 my_Window = new Window1(IDMapper );
 my_Window.ShowDialog();
}

然后在Window构造函数或Loaded事件

中执行查询
Window(string IDMapper)
{
    var Query1 = (from a in this.db.Details
               orderby a.ID == IDMapper
               select a).ToList();
}

您需要访问页面和窗口中的数据,您应该将EF移动到一个数据层,这个数据层都可以访问上下文,如果您只是将查询结果列表传递给Window构造函数

您还应该为Window.xaml选择一个不同的名称,以避免混淆,因为您与Window冲突并因此拥有Window1,