Хочу сделать свою программу многостраничной. Для этого я назначил кнопке событие по переключению страниц. Вот xaml:
<Button Command="{Binding StartClick}"/>
вот сам StartClick:
public ICommand StartClick
{
get
{
return new RelayCommand(() => SwitchPage(PrepareSI));
}
}
public async void SwitchPage(Page page)
{
await Task.Factory.StartNew(() =>
{
CurrentPage = page;
});
}
Когда нажимаю на кнопку ничего не происходит. Возможно есть другой способ переключений между страницами? Этот я взял с ролика. Там, правда, кнопки находится не на странице, а я хочу переключатся внутри страницы на другую.
Попутный вопрос: в этом же ролике свойства задавались через Binding вот так:
<Frame Content="{Binding CurrentPage}"/>
У меня же работает только так:
<Frame Content="{Binding Path=CurrentPage}"/>
С чем это связано?
Реализация CurrentPage:
//Возможные страницы
public Page Main;
public Page PrepareSI;
public Page SI;
public Page Settings;
public Page CurrentPage;
public MainViewModel()
{
Main = new Pages.Main();
PrepareSI = new Pages.PrepareSI();
SI = new Pages.SI();
Settings = new Pages.Settings();
CurrentPage = Main;//ПО умолчанию начальная страница - Main
}
getинициализируете команду? Бедный сборщик мусора... Зачем тутasync? Также вы не показали самих свойств (CurrentPageнапример). Ну а вообще, я настоятельно рекомендую вам отказаться отFrame, ибо он совершенно не пригоден для привязок и имеет ряд своих заморочек. – EvgeniyZ Dec 14 '19 at 21:31CurrentPage- объект классаPage. Указывает текущую страницу приложения. – Dec 14 '19 at 21:36INotifyPropertyChanged. – EvgeniyZ Dec 14 '19 at 21:54public Page CurrentPage;- это поле, не свойство! Оно не подходит для привязки (это ответ на ваш "попутный вопрос"). При обновление этого поля не вызываетсяOnPropertyChenged()(это ответ на "ничего не происходит"). – EvgeniyZ Dec 14 '19 at 21:56