bas
bas

Reputation: 14932

WPF: Easiest way to add control to grid based on ListView selection

I have a ListView which contains items that should represent certain settings, which can be changed by the user. I am looking for the easiest way to link the ListViewItem to a custom user control.

What I have now:

    <ListView 
        Grid.Row="0" 
        Grid.Column="0"
        SelectionChanged="SettingsListViewSelectionChanged">

        <ListViewItem x:Name="PathSettings" Content="Path"/>
        <ListViewItem x:Name="HideShowTvShows" Content="Hide/Show TV Shows"/>
    </ListView>

And then in the code behind I figure out which item was clicked, and attach the corresponding UserControl to the Grid.

    private void SettingsListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var listView = e.Source as ListView;

        if (listView != null)
        {
            SettingsContentPanel.Children.Clear();

            if (listView.SelectedItem.Equals(_pathSettings))
            {
                SettingsContentPanel.Children.Add(_pathSettings);

                _pathSettings.SetValue(Grid.RowProperty, 0);
                _pathSettings.SetValue(Grid.ColumnProperty, 1);
            }
            if (listView.SelectedItem.Equals(_hideShowTvShowsSettings))
            {
                SettingsContentPanel.Children.Add(_hideShowTvShowsSettings);

                _hideShowTvShowsSettings.SetValue(Grid.RowProperty, 0);
                _hideShowTvShowsSettings.SetValue(Grid.ColumnProperty, 1);
            }
        }
    }

And the Grid itself:

    <Grid 
        x:Name="SettingsContentPanel" 
        Grid.Row="0" 
        Grid.Column="2" 
        Grid.ColumnSpan="2" />

Is there a way to get rid of the boiler plate code behind and use XAML for this purpose?

Upvotes: 0

Views: 252

Answers (1)

Fede
Fede

Reputation: 44048

Looks like you're looking for a ContentPresenter:

<ContentPresenter x:Name="SettingsContentPanel"
                  Content="{Binding SelectedItem, ElementName=MyLstView}"/>

Upvotes: 1

Related Questions