None
None

Reputation: 5670

Make ListView Item Selected Form ItemSource

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

Answers (1)

oRole
oRole

Reputation: 1346

Depending on when you want the selection to happen, subscribe to an event of the ListView where you add the selected OptionItems 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

Related Questions