我想實現一個功能,如果我打開ListView中的任何開關,其他開關應該關閉。在ListView裏面一次只打開一個開關
以下是我的XAML:
<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>
我使用MVVM綁定,並試圖改變事件的數據 'OnPropertyChanged( 「IsActive」)',但無法實施。
任何建議都會有幫助。
編輯:
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 ..謝謝你的迴應。我做了改變。請參閱編輯。我試圖在Profile類下的'IsActive'中更改'AllProfiles'的項目數據。我怎樣才能做到這一點? –