Reputation: 5670
I have a ListView like this
<ListView x:Name="lview" SelectionMode="Multiple">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name, Mode=OneWay}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
I am binding data to this Listview like this
public MainPage()
{
this.InitializeComponent();
ObservableCollection<OptionItem> io = new ObservableCollection<OptionItem>();
io.Add(new OptionItem { Name = "11111111111", IsSelected=false });
io.Add(new OptionItem { Name = "22222222222", IsSelected=true });
io.Add(new OptionItem { Name = "33333333333", IsSelected=true });
io.Add(new OptionItem { Name = "44444444444",IsSelected=false });
lview.ItemsSource = io;
}
Now you can see inside my Model, I have a Property called IsSelected
. How can I bind this to the listView, so that the Items selected in the ItemsSource
comes as selected in ListView?
Upvotes: 0
Views: 130
Reputation: 1346
Depending on when you want the selection to happen, subscribe to an event of the ListView
where you add the selected OptionItem
s to the list of selected items:
Code
private void Lview_SizeChanged(object sender, SizeChangedEventArgs e)
{
var listView = sender as ListView;
foreach (OptionItem item in listView.Items)
{
if (item.IsSelected)
{
listView.SelectedItems.Add(item);
}
}
}
XAML
<ListView x:Name="lview" SelectionMode="Multiple" SizeChanged="Lview_SizeChanged">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name, Mode=OneWay}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Anyway you probably want to consider using a pattern like MVVM as this will make your code (by far!) more readable and easier to maintain.
Upvotes: 2