C# 在用户控件中将数据添加到datagrid

C# 在用户控件中将数据添加到datagrid,c#,wpf,datagrid,C#,Wpf,Datagrid,我做了两个窗口,一个是用户控制,另一个是datagrid。 我想在MainWindow中添加数据,并在UserControl(Window2)中显示数据,但它不起作用,当我将UserControl更改为simple window时,它可以正常工作。我怎样才能重写它?我是新手,正在学习c#和wpf:) MainWindow.xaml public partial class MainWindow : Window { GridControl ngridControl = new GridC

我做了两个窗口,一个是用户控制,另一个是datagrid。 我想在MainWindow中添加数据,并在UserControl(Window2)中显示数据,但它不起作用,当我将UserControl更改为simple window时,它可以正常工作。我怎样才能重写它?我是新手,正在学习c#和wpf:)

MainWindow.xaml

public partial class MainWindow : Window
{
    GridControl ngridControl = new GridControl();
    GridWindow ngridWindow = new GridWindow();

    public MainWindow()
    {
        InitializeComponent();
        ngridWindow.Show();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Information item = new Information();
        item.id = name_box.ToString();
        item.name = number_box.ToString();
        ngridControl.informationList.Add(item);
    }
}
<Window x:Class="WpfApp5.GridWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp5"
    mc:Ignorable="d"
    Title="GridWindow" Height="450" Width="800">
<Grid>
    <local:GridControl> </local:GridControl>
</Grid>
GridControl.xaml

public partial class GridControl : UserControl
{
    public ObservableCollection<Information> informationList = new ObservableCollection<Information>();

    public GridControl()
    {
        InitializeComponent();
        dataGrid.ItemsSource = informationList;
    }
}
GridWindow.xaml

public partial class MainWindow : Window
{
    GridControl ngridControl = new GridControl();
    GridWindow ngridWindow = new GridWindow();

    public MainWindow()
    {
        InitializeComponent();
        ngridWindow.Show();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Information item = new Information();
        item.id = name_box.ToString();
        item.name = number_box.ToString();
        ngridControl.informationList.Add(item);
    }
}
<Window x:Class="WpfApp5.GridWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp5"
    mc:Ignorable="d"
    Title="GridWindow" Height="450" Width="800">
<Grid>
    <local:GridControl> </local:GridControl>
</Grid>


您有两个GridControl实例

<Window x:Class="WpfApp5.GridWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp5"
    mc:Ignorable="d"
    Title="GridWindow" Height="450" Width="800">
    <Grid>
        <local:GridControl> </local:GridControl>
    </Grid>
</Window>

public partial class GridWindow : Window
{
    public GridWindow()
    {
        InitializeComponent();
    }

    public void AddInformation(Information item)
    {
        ngridControl.AddInformation(item);
    }
}
在GridWindow中,显示的是无数据的

主窗口有
GridControl ngridControl=new GridControl()包含数据但不显示在任何位置的实例

可以做些什么

最好的解决方案是将应用程序架构更改为MVVM,并为您的windows创建视图模型<代码>ObservableCollection信息列表
将成为GridWindowViewModel的一个属性。GridControl将具有用于绑定
信息列表的DependencyProperty,而不是common属性。MainWindowViewModel将能够创建GridWindowviewModel,将其用作GriwWindow的数据上下文,并将项目添加到
信息列表中

本地解决方案是在两个窗口中使用一个GridControl实例。GridWindow应允许向GridControl添加项

<Window x:Class="WpfApp5.GridWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp5"
    mc:Ignorable="d"
    Title="GridWindow" Height="450" Width="800">
    <Grid>
        <local:GridControl> </local:GridControl>
    </Grid>
</Window>

public partial class GridWindow : Window
{
    public GridWindow()
    {
        InitializeComponent();
    }

    public void AddInformation(Information item)
    {
        ngridControl.AddInformation(item);
    }
}
GridWindow.xaml中的
元素指定
x:Name

<local:GridControl x:Name="theControl"> </local:GridControl>

你可以发布GridWindow的代码吗?在GridWindow中,我只是将gridControl放在显示它的位置。我猜你在
gridControl
中缺少绑定。当我重写它时,你发布了它,它对我不起作用。我将尝试用mvvm制作一些东西,但我认为它对我的技能水平来说太高了:)它可以工作!但datagrid中显示的项看起来像:System.Windows.Controls.TextBox:123 System.Windows.Controls.TextBox:asdas然后需要稍微修改XAML。但那是另一个故事。如果你还有其他问题,请问一个新问题。@Danki:请记住投票选出有用的答案:)