FreshMVVM доступа PageModel из кода страницы позади

Я использую формы xamarin с фреймворком freshmvvm.

Я хотел бы знать, как я могу пропустить, используя xaml, и просто получить доступ к данным привязки из кода в C#.

Есть ли примеры кода, которые могут помочь?

2 ответа

Решение

Хотя это идет вразрез с принципами MVVM, конечно, есть способ сделать это.

Без инфраструктуры MVVM вы просто создадите ViewModel вручную и установите BindingContext ( документация) самостоятельно. Единственное (в этом отношении), что MVVM-инфраструктура делает для вас, - это автоматическое связывание, поэтому вам не нужно писать один и тот же код снова и снова.

Итак, представьте, что у вас есть эта ViewModel, обратите внимание, что я PageModel пользователя, чтобы соответствовать именованию FreshMvvm:

// SamplePageModel.cs
public class SamplePageModel
{
    public string Foo { get; set; } = "Bar";
}

Теперь на моей странице я установил BindingContext так:

// SamplePage.cs
// ... Skipped code, just constructor here:
public SamplePage()
{
    InitializeComponent();

    BindingContext = new SamplePageModel();
}

Теперь вы можете привязать к любому свойству SamplePageModel,

FreshMvvm выполняет эту часть автоматически. Если по какой-либо причине вы хотите получить прямой доступ к ViewModel/PageModel, просто сделайте обратное. Где-то на вашей странице или коде вы можете сделать:

// ... Some code here
var pageModel = BindingContext as SamplePageModel;
// ... More code here

Сейчас если pageModel не null там у вас есть привязанная к данным и заполненная PageModel!

Мне показался полезным ответ Джеральда, но я обнаружил, что вам нужно переопределить это событие на своей странице, вместо того, чтобы делать как в конструкторе:

protected override void OnBindingContextChanged()
{
    base.OnBindingContextChanged();

    var pageModel = BindingContext as YourFreshMVVMPageModel;

    // Modify the page based on the pageModel
}

Конструкция PageModel, кажется, имеет место после Конструктора страницы, и это Событие, кажется, срабатывает в нужное время и все еще заставляет страницу делать то, что вы хотите.

Другие вопросы по тегам