Потеря фокуса DataContext при установке второго DataContextC#

Место общения программистов C#
Anonymous
Потеря фокуса DataContext при установке второго DataContext

Сообщение Anonymous »

У меня есть класс TabItemView.xaml.cs с конструктором. Я устанавливаю в нем DataContext в MainViewModel, потому что в TabItemView находится DataGrid, к которому мне нужно привязать данные.

Код: Выделить всё

public partial class TabItemView : UserControl
{
public TabItemView()
{
InitializeComponent();
MainViewModel myModel= new MainViewModel();
this.DataContext = myModel;
}
}
В классе MainWindow.xaml.cs я также установил DataContext в MainViewModel в событии button_Click. Это событие добавляет новую вкладку при нажатии кнопки

Код: Выделить всё

 public partial class MainWindow2 : Window
{
//Constructor and some other stuff
.....
private void AddInvoice_Click(object sender, RoutedEventArgs e)
{
count++;

string s = string.Format("Tab {0}", count);
mainViewModel.Items.Add(new ItemViewModel(s));
this.DataContext = mainViewModel;
}
}
Это моя модель MainViewModel

Код: Выделить всё

 public class MainViewModel : ViewModelBase
{
private ObservableCollection items = new ObservableCollection();
private ObservableCollection invoice_items = new ObservableCollection();

public ObservableCollection Invoice_Items
{
get
{
return invoice_items;
}
set
{
invoice_items = value;
OnPropertyChanged("Invoice_Items");
}
}

public ObservableCollection Items
{
get
{
return items;
}
set
{
items = value;
OnPropertyChanged("Items");
}
}

private int _selectedTabIndex;

public int SelectedTabIndex
{
get { return _selectedTabIndex; }
set { _selectedTabIndex = value; }
}

public MainViewModel()
{
SelectedTabIndex = 0;
}

}
}
Это разметка для MainWindow И это для TabItemView Теперь проблема. Когда я устанавливаю DataContext только в MainWindow, мои текстовые поля реагируют нормально, а мои элементы ObservableCollection уведомляются об изменениях. Когда я добавляю новую вкладку, она создается нормально без текста в текстовых полях.
Но когда я устанавливаю DataContext как в MainWindow, так и в TabItemView (как в коде, который я добавил), чтобы уведомить мою Invoice_Item ObservableCollection об изменениях в DataGrid, мой DataContext для обеих ObservableCollection теряется, они больше не уведомляются об изменениях. Когда я добавляю новую вкладку, она дублирует данные, которые я добавил в предыдущие вкладки как в TextBox, так и в DataGrid.
Кроме того, когда я не устанавливаю DataContext в MainWindow и устанавливаю его только в TabItemView, мой ObservableCollection Invoice_Items получает уведомление об изменениях в DataGrid, но когда я добавляю новую вкладку, Данные DataGrid просто дублируются в каждой добавленной вкладке.
Почему это происходит, что я делаю не так? И как я могу решить эти проблемы?
Если вам нужно больше кода или информации, просто скажите. Я ищу любую помощь в понимании того, как решить мою проблему. Спасибо за ответы.

Вернуться в «C#»