как использовать тот же экземпляр представления в navigationservice.navigate () в wpf - PullRequest
0 голосов
/ 15 мая 2019

У меня есть два вида (viewA и viewB), где я перемещаюсь между ними в главном окне с помощью навигационного сервиса. Мне нужно использовать один и тот же экземпляр viewA после многократной навигации.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Я бы сделал это универсальным.

Вы не говорите, что такое навигационная служба или каковы виды.

Либо ведите список просмотров самостоятельно.

Добавление словаря с ключом типа и значением Page (или объекта или любого другого представления в вашем приложении).

Когда вы перемещаетесь, вы можете перейти к типу и проверить, есть ли уже запись в вашем словаре, используя .ContainsKey (theType). Если он там есть, перейдите к нему, передав его в свой процесс навигации. Если там никого нет, тогда

Activator.CreateInstance(theType)

Для создания страницы / просмотра / чего угодно.

Добавьте это в свой словарь и перейдите к нему.

Или

Используйте контейнер для инъекций зависимостей, например, Unity, чтобы. Разрешить одиночный код для каждого представления.

В любом случае вам может понадобиться какой-то новый метод или изменения существующего в зависимости от того, что делает ваша навигационная служба.

0 голосов
/ 15 мая 2019

Я использую экземпляр Page для навигации по страницам.Каждый Page может иметь каждый viewmodel для хранения данных.И вам просто нужно связать данные, если вы хотите обновить данные с viewmodel в режиме реального времени.

MainWindow xaml

<StackPanel>
    <Button Click="Button_Click">Change Page</Button>
    <Frame Name="ContentPage"></Frame>
</StackPanel>

MainWindow BehindКод

    private Page viewA = new ViewA();
    private Page viewB = new ViewB();

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

    private int page;

    public void Button_Click(object sender, EventArgs e)
    {
        page++;
        if (page % 2 == 0)
            ContentPage.Navigate(viewA);
        else
            ContentPage.Navigate(viewB);
    }

ViewA xaml

<Grid>
    <TextBlock Name="ViewAText"/>
</Grid>

ViewA за кодом

    public ViewA()
    {
        InitializeComponent();
        DataContext = new ViewAViewModel();
        ViewAViewModel viewmodel = DataContext as ViewAViewModel;
        ViewAText.Text = viewmodel.text;
    }

ViewB xaml

<Grid>
    <TextBlock Name="ViewBText"/>
</Grid>

ViewB за кодом

    public ViewB()
    {
        InitializeComponent();
        DataContext = new ViewBViewModel();
        ViewBViewModel viewmodel = DataContext as ViewBViewModel;
        ViewBText.Text = viewmodel.text;
    }
...