Я решил использовать архитектуру mvvm в своем проекте и попытался преобразовать в нее свой код. Но похоже, что я что-то неправильно понимаю, так как свойства, которые я хотел бы установить в команде реле, либо не изменяются, либо изменение не имеет никакого эффекта. В любом случае такое поведение нежелательно.
Мой код очень прост и выглядит так:
MainViewModel.cs
public partial class MainViewModel : ObservableRecipient
{
[ObservableProperty] private string testText;
[RelayCommand]
private void Toggle()
{
testText = "pressed";
}
}
Mainview.xaml
<Page
x:Class = "Calendarium.Views.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d"
xmlns:viewModels = "using:Calendarium.ViewModels"
d:DataContext = "{d:DesignInstance Type=viewModels:MainViewModel}">
<Grid>
<TextBlock Text = "{Binding TestText}">
<Button Command = "{Binding ToggleCommand}">
</Grid>
</Page>





Вы, кажется, установили только время разработки DataContext.
Вам также необходимо установить фактический DataContext, который используется во время выполнения:
<Page
x:Class = "Calendarium.Views.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d"
xmlns:viewModels = "using:Calendarium.ViewModels"
d:DataContext = "{d:DesignInstance Type=viewModels:MainViewModel}">
<Page.DataContext>
<viewModels:MainViewModel />
</Page.DataContext>
<Grid>
...
</Grid>
</Page>
Кроме того, вы должны установить значение сгенерированного свойства в вашем методе Toggle:
[RelayCommand]
private void Toggle()
{
TestText = "pressed";
}
Похоже, я следовал устаревшему руководству. Он использовал
x:Datatype, чтобы связать его. Однако теперь это работает! Спасибо за вашу помощь.