Как передать что-то в параметр конструктора ViewModel при создании непосредственно в xaml?

Ранее я задавал датаконтекст окна/страницы весьма стандартно посредством инструкции в коде-позади, в таком случае у меня не возникало никаких проблем.

public class ExampleWindowViewModel
{
    public ExampleWindowViewModel(int parameter)
    {
        ...
    }
}
public partial class ExampleWindow : Window
{
    public ExampleWindow() 
    {
        this.DataContext = new ExampleWindowVievModel(88005553535);
    }
}

Но теперь я узнал о возможности задавать датаконтекст непосредственно через код разметки, что позволило дизайнеру отображать свойства экземпляра ExampleWindowViewModel в областях биндинга. Для меня это стало гораздо более удобным вариантом, так как нужно меньше писать и в случаях каких-либо несостыковок не гадать о том, правильно ли задан датаконтекст у элемента или нет. Разметка в таком случае даже запускаемые при создании VM асинхронные задачи учитывает. Собственно, из-за нежелания терять подобный функционал я наотрез отказываюсь задавать задаконтекст в коде-позади и пытаюсь найти решение проблемы в заголовке.

<Window x:Class="Namespace.ExampleWindow" бла-бла-бла Title="ExampleWindow">
    <Window.DataContext>
        <vm:MainWindowViewModel/>
    </Window.DataContext>
    ...
</Window>

Как здесь передать что-то в параметры конструктора?

<vm:MainWindowViewModel/>

В документах от мелкомягких так ни не смог найти решения.

Дизайнер не предложил мне никаких свойств зависимостей, в которые можно вписать параметр, а делать собственные и связывать их с конструктором — это морока, которую делать не каждому охота.


Ответы (1 шт):

Автор решения: aepot

Вы можете использовать не аргументы конструктора, а публичные свойства.

public class ExampleWindowViewModel
{
    public int Parameter { get; set; }

    public ExampleWindowViewModel()
    {
        ...
    }
}
public partial class ExampleWindow : Window
{
    public ExampleWindow() 
    {
        this.DataContext = new ExampleWindowVievModel { Parameter = 88005553535 };
    }
}
<Window x:Class="Namespace.ExampleWindow" бла-бла-бла Title="ExampleWindow">
    <Window.DataContext>
        <vm:MainWindowViewModel Parameter="88005553535"/>
    </Window.DataContext>
    ...
</Window>
→ Ссылка