Добавление данных в сетку данных в пользовательском элементе управления - PullRequest
0 голосов
/ 11 июня 2018

Я сделал два окна, одно с пользовательским контролем, и я застрял с сеткой данных.Я хочу добавить данные в MainWindow и показать их в UserControl (Window2), но это не работает, когда я изменяю usercontrol на простое окно, это нормально и работает.Как я могу переписать это?Я новичок и только изучаю 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);
    }
}

GridControl.xaml

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

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

}

Information.class

public class Information
{
    public string name { get; set; }
    public string id { get; set; }
}

GridWindow.xaml

<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>

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Дайте элемент <GridControl> в GridWindow.xaml и x:Name:

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

... и добавьте элемент к этому informationList:

public partial class MainWindow : Window
{
    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();
        ngridWindow.theControl.informationList.Add(item);
    }
}
0 голосов
/ 11 июня 2018

у вас есть два экземпляра GridControl.

в GridWindow это <local:GridControl> </local:GridControl>, которое отображается без данных,

, а MainWindow имеет GridControl ngridControl = new GridControl(); экземпляр, который содержит данные, но нигде не отображается.

что можно сделать?

лучшее решение - изменить архитектуру приложения на MVVM и создать модели представления для ваших окон.ObservableCollection<Information> informationList станет собственностью GridWindowViewModel.GridControl будет иметь свойство DependencyProperty для привязки informationList вместо общего свойства.MainWindowViewModel сможет создавать GridWindowviewModel, использовать его в качестве DataContext для GriwWindow и добавлять элементы в informationList.

. Локальное исправление заключается в работе с одним экземпляром 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);
    }
}
public partial class MainWindow : Window
{
    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();
        ngridWindow.AddInformation(item);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...