У меня есть WPF
приложение с 2 страницами и это Frame
:
<Window>
<Window.DataContext>
<common:ViewModel/>
</Window.DataContext>
<Grid Name="GridMain" Grid.Row="1">
<Frame Name="MyFrame"
NavigationUIVisibility="Hidden"
Source="Pages/home.xaml"/>
</Grid>
</Window>
Итак, у меня есть 2 Pages
Home.xaml
Options.xaml
И мой ViewModel
:
public class ViewModelBase : INotifyPropertyChanged
{
private ObservableCollection<MyData> files;
public ICommand SliderSpeedValueChangedCommand { get; set; }
public ViewModelBase()
{
Files = new ObservableCollection<MyData>();
SliderSpeedValueChangedCommand = new SliderSpeedValueChangedCommand(this);
}
public ObservableCollection<MyData> Files
{
get { return files; }
set
{
files = value;
NotifyPropertyChanged();
}
}
}
Так что в моем HomePage
у меня есть это ListView
:
<ListView Name="ListViewFiles"
ItemsSource="{Binding Files}"/>
И пользователь выбирает файлы, которые добавляются в этот ListView
.
Сейчаскогда пользователь переключается на другой Page
(Options.xaml
), а затем переключается обратно на HomePage
, все файлы внутри этого ListView
исчезают.
Внутри этих 2 страниц у меня также есть это:
<Page.DataContext>
<viewmodel:ViewModelBase/>
</Page.DataContext>
<Page.Resources>
<vm:ViewModelBase x:Key="ViewModelBase"/>
</Page.Resources>
Что я делаю не так?
Обновление
Вот как я переключаюсь между Pages
:
public partial class MainWindow : Window
{
public ViewModel viewModel;
private Home home;
private Options options;
public MainWindow()
{
InitializeComponent();
viewModel = new ViewModel();
home = new Home();
options = new Options();
}
private void ListBoxMenu_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int index = ListBoxMenu.SelectedIndex;
switch (index)
{
case 0:
MyFrame.Content = home;
break;
case 1:
MyFrame.Content = options;
break;
}
}
}
РЕДАКТИРОВАТЬ
Итак, у меня есть простая команда:
public class AddFilesCommand : ICommand
{
public event EventHandler CanExecuteChanged;
public ViewModelBase ViewModel { get; set; }
public AddFilesCommand(ViewModelBase viewModel)
{
ViewModel = viewModel;
}
public bool CanExecute(object parameter)
{
return !ViewModel.AddingFiles;
}
public void Execute(object parameter)
{
ViewModel.AddFile();
}
}
А внутри ViewModelBase
не могу я инициировать этот класс:
AddFilesCommand = new AddFilesCommand(this);
И просто Button
:
<Button Command="{Binding AddFilesCommand}"/>
И после нажатия этой Button
функция Execute
не вызывается.