ListViewでスイッチをオンにすると、他のスイッチがオフになる機能を実装しようとしています。私はMVVMバインディングを使用して、イベントのデータを変更しようとしている '( "のisActive")をOnPropertyChangedを' は実装することができませんリストビュー内でスイッチを一度に1つだけオンにする
<ListView ItemsSource="{Binding AllProfiles}" HasUnevenRows="True" SeparatorVisibility="None" RowHeight="-1">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical" BackgroundColor="#F6F6F6">
<Frame Padding="2" BackgroundColor="#FFFFFF" Margin="10,5,10,5">
<StackLayout Orientation="Horizontal" BackgroundColor="#FFFFFF" Padding="20">
<StackLayout Orientation="Vertical">
<Label Text="{Binding Name}" TextColor="#FF6D9D" FontSize="25"></Label>
<Label Text="{Binding Email}" TextColor="#B1B1B1" FontSize="18"></Label>
</StackLayout>
<Switch HorizontalOptions="EndAndExpand" VerticalOptions="CenterAndExpand" IsToggled="{Binding IsActive}">
</Switch>
</StackLayout>
</Frame>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
:
以下は、私のXAMLです。
提案が参考になります。
編集:
public class SetProfileViewModel:ViewModelBase
{
private ObservableCollection<Profile> _allProfiles = new ObservableCollection<Profile>();
public ObservableCollection<Profile> AllProfiles
{
get { return _allProfiles; }
set
{
_allProfiles = value;
OnPropertyChanged("AllProfiles");
}
}
}
public class Profile:ViewModelBase
{
private string _name;
private string _email;
private bool _isActive;
public string Name {
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public string Email
{
get { return _email; }
set
{
_email = value;
OnPropertyChanged("Email");
}
}
public bool IsActive
{
get { return _isActive; }
set
{
_isActive = value;
OnPropertyChanged("IsActive");
//How can I change 'AllProfiles' data from here.
}
}
}
データバインディングを使用している場合、 'AllProfiles'コレクションのアイテムを反復してプロパティをfalseに設定するだけです。 –
@GeraldVersluis ..応答に感謝します。私は変更を加えました。編集を参照してください。私はプロファイルクラスの下で 'IsActive'の 'AllProfiles'のアイテムデータを変更しようとしています。どうやってやるの? –