我有一组通过ItemTemplate创建的单选按钮.我想在单击按钮时重置当前选中的单选按钮.请帮助我了解在MVVM架构中,当我使用ItemTemplate时,关于当前 Select 的单选按钮的信息隐藏在哪里.以及如何移除所述 Select .
我安装了NuGet社区工具包.Mvvm,并创建了一个GitHub存储库,其中包含以下所有代码:https://github.com/jacobfredsoee/ItemTemplateResetHelp
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="ItemTemplateReset.View.MainPage"
xmlns:model="clr-namespace:ItemTemplateReset.Model">
<ScrollView>
<VerticalStackLayout
Padding="20">
<Label Text="Role type:"/>
<VerticalStackLayout>
<CollectionView ItemsSource="{Binding PickableRoles}">
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="model:PickableRole">
<RadioButton Content="{Binding Name}"
Value="{Binding Id}"
CheckedChanged="OnRoleChange"/>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</VerticalStackLayout>
<Label Text="{Binding SelectedRole, StringFormat='Selected Role: {0}'}" x:Name="SelectedRole"/>
<Button
x:Name="ResetButton"
Text="Click me to reset"
Clicked="OnResetClicked"
HorizontalOptions="Center" />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
代码背后,MainPage.xaml.cs
namespace ItemTemplateReset.View;
public partial class MainPage : ContentPage
{
MainPageViewModel viewModel;
public MainPage(MainPageViewModel viewModel)
{
InitializeComponent();
BindingContext = viewModel;
this.viewModel = viewModel;
}
private void OnResetClicked(object sender, EventArgs e) {
//How to reset the radio buttons so that none is selected?
viewModel.SelectedRole = -1; //This does not work
}
private void OnRoleChange(object sender, CheckedChangedEventArgs e) {
RadioButton rb = sender as RadioButton;
viewModel.SelectedRole = int.Parse(rb.Value.ToString());
}
}
The ViewModel,MainPageViewModel.cs:
namespace ItemTemplateReset.ViewModel;
public partial class MainPageViewModel : ObservableObject
{
public ObservableCollection<PickableRole> PickableRoles { get; set; } = new();
[ObservableProperty]
public int selectedRole = -1;
public MainPageViewModel() {
SetPickableRoles();
}
private void SetPickableRoles() {
PickableRoles.Add(new PickableRole() { Id = 1, Name = "Role 1"} );
PickableRoles.Add(new PickableRole() { Id = 2, Name = "Role 2" });
PickableRoles.Add(new PickableRole() { Id = 3, Name = "Role 3" });
PickableRoles.Add(new PickableRole() { Id = 4, Name = "Role 4" });
PickableRoles.Add(new PickableRole() { Id = 5, Name = "Role 5" });
}
}
最后,模型PickableRole.cs
namespace ItemTemplateReset.Model;
public class PickableRole
{
public string Name { get; set; }
public int Id { get; set; }
}