C# 在用户控件中将数据添加到datagrid
我做了两个窗口,一个是用户控制,另一个是datagrid。 我想在MainWindow中添加数据,并在UserControl(Window2)中显示数据,但它不起作用,当我将UserControl更改为simple window时,它可以正常工作。我怎样才能重写它?我是新手,正在学习c#和wpf:) MainWindow.xamlC# 在用户控件中将数据添加到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
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:请记住投票选出有用的答案:)