0

Имеется 2 окна. В одном (EmployeePage) окне DataGrid:

<DataGrid ItemsSource="{Binding Items}" x:Name="E_DataGrid" Grid.Row="0">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=FIO, UpdateSourceTrigger=PropertyChanged}" HeaderStyle="{StaticResource CenterGridHeaderStyle}" Width="*" Header="ФИО"></DataGridTextColumn>
        </DataGrid.Columns>

И кнопка вызова другого (E_AddPage) окна:

<Button x:Name="E_Add" Click="E_Add_Click" Content="Добавить" />

В E_AddPage:

<TextBox x:Name="FIO_TextBox"  FontSize="16" Margin="0,0,0,30" Width="300" Height="25"  />

Используется паттерн MVVM, только начал его изучать, как и WPF в целом. Поэтому созданы еще 2 класса - Item.cs и ItemViewModel

Код Item.cs:

public class Item : INotifyPropertyChanged
{
    string _fio;
public string FIO
{
    get
    {
        return this._fio;

    }

    set
    {
        _fio = value;
        OnPropertyChanged(&quot;FIO&quot;);
    }
}


public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged([CallerMemberName] string prop = "") { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(prop)); }

Там много данных должно быть, но для удобства я сократил до одной (FIO)

Код ItemViewModel:

class ItemViewModel
{
    private ObservableCollection<Item> _items = new ObservableCollection<Item>();
    public ObservableCollection<Item> Items { get; set; }
    public ItemViewModel()
    {
        Items = new ObservableCollection<Item>
        {
            new Item{FIO="131" /*ProductName="435", OrderNumber=421124, PurchaseDate="432432453", DeliveryAvailability=true, DeliveryDate="244"*/ }
        };
    }
public void AddItem()
{
    Item item = new Item();
    Items.Insert(0, item);

}


}

Как мне сделать так, чтобы с текстбокса одного окна занисились данные в датагрид другого окна?

Dovee
  • 15
  • 6
  • Подсказка: OnPropertyChanged("FIO") можно заменить на просто OnPropertyChanged(), так как [CallerMemberName] сам подставит нужное значение. – aepot Feb 03 '21 at 08:17
  • 1
    Тут 2 варианта возможны: 1) Открыто главное окно с таблицей, нажимаем кнопку, открывается поверх другое окно, вводим там данные, нажимаем ОК, окно закрывается, в таблицу добавляются новые данные; 2) Отрыты сразу 2 окна, в одно окно вводим, в другом данные добавляются в таблицу. Вам какой вариант нужен? С другой стороны общая тенденция в создании UI такая, что вся работа происходит только в одном окне, как в браузере или в мобильном приложении; переходы между страницами, и никакие доп.окна не открываются. Посмотрите примерчик может пригодится. – Bulson Feb 03 '21 at 08:46
  • @Bulson Мне нужен 1 вариант. Сейчас посмотрю ваш пример – Dovee Feb 03 '21 at 09:12
  • Есть еще примерчик, попроще, опять же без окон. – aepot Feb 03 '21 at 10:25
  • У вас вопрос Как мне сделать так, чтобы с текстбокса одного окна занисились данные в датагрид другого окна?, но вы не показывается как окно открывается, как вы сами пытаетесь туда передать данные, вы просто показали разметку кнопки (где нарушаете MVVM, ибо используете событие Click) и показываете ваши данные, все. От нас тогда вы что хотите, чтоб мы за вас написали открытие нового окна? Ок, тогда это дубликат. – EvgeniyZ Feb 03 '21 at 15:36

0 Answers0