WPF: как связать мою коллекцию с разных страниц - PullRequest
0 голосов
/ 19 января 2019

Итак, у меня есть Collection внутри моего ViewModel:

public class ViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private ObservableCollection<NetworkInterface> _interfaces;

        public ViewModel()
        {
            Interfaces = NetworkInterface.ReadAll();
        }

        public ObservableCollection<NetworkInterface> Interfaces
        {
            get { return _interfaces; }
            set
            {
                _interfaces = value;
                NotifyPropertyChanged();
            }
        }

        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

Это NetworkInterface является реализацией PropertyChanged, и когда приложение полностью заполняется элементами.

Инициализировать мой ViewMode:

public MainWindow()
{
     InitializeComponent();
     viewModel = new ViewModel();
 }

В моем приложении есть еще один Page, который загружается внутри Frame после кнопки Click:

<Grid Name="GridMain" Grid.Row="1">
          <Frame Name="MyFrame"
                 NavigationUIVisibility="Hidden"
                 Source="Pages/home.xaml"/>
</Grid>

Загрузить Page:

Home home = new Home();
MyFrame.Content = home;

А внутри моего ComboBox:

<ComboBox ItemsSource="{Binding Interfaces}" Height="30" Width="300"/>

Я тоже попробую:

<ComboBox ItemsSource="{Binding Path=Interfaces}" Height="30" Width="300"/>

Но все равно мой ComboBox пуст

EDIT

Если это ComboBox находится внутри основного приложения, а не внутри Page, это нормально работает.

1 Ответ

0 голосов
/ 21 января 2019

DataContext из MainWindow не является DataContext из Page в Frame. Вы можете установить DataContext фрейма программно, хотя:

Page в Frame автоматически не наследует DataContext от MainWindow, но вы можете установить его свойство DataContext при загрузке Page:

Home home = new Home();
home.DataContext = viewModel;
MyFrame.Content = home;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...