Search code examples
c#wpfxamdatagrid

XamDataGrid Bind based on selected item in listbox


I am trying to load datagrid based on selected item from listbox.

Can you please help me how can I achieve.

Below is my Model

Artist Class

public class Artist.
{
public string Name { get; set; }
public int Age { get; set; }
}

Movie Class

public class Movie
{
private string _Name = string.Empty;

public string Name
{
get
{
return _Name;
}

set
{
_Name = value;
}
}

private List _Artists = new List();

public List Artists
{
get
{
return _Artists;
}
set
{
_Artists = value;
}
}
}

ViewModel Class

public class ViewModel
{

private List _Movies;

public List Movies
{
get
{
return _Movies;
}

set
{
_Movies = value;
}
}

public ViewModel()
{

_Movies = new List();

Movie movie = new Movie();
movie.Name = "Movie 1";

List artists = new List();

Artist artist1 = new Artist();
artist1.Name = "Artist 1";
artist1.Age = 27;

artists.Add(artist1);

movie.Artists = artists;

_Movies.Add(movie);

//2nd record

movie = new Movie();
movie.Name = "Movie 2";

artists = new List();

artist1 = new Artist();
artist1.Name = "Artist 2";
artist1.Age = 27;

artists.Add(artist1);

movie.Artists = artists;

_Movies.Add(movie);

}
}

Below is Xaml - ViewModel object bind to window datacontext

<Grid>

<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>

<ListBox Name="MoviesList" Grid.Column="0" Width="150" ItemsSource="{Binding Movies}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

<igWPF:XamDataGrid Grid.Column="1" DataSource="{Binding Movies}">
<igWPF:XamDataGrid.FieldLayouts>
<igWPF:FieldLayout>
<igWPF:Field Name="Name"/>
</igWPF:FieldLayout>
</igWPF:XamDataGrid.FieldLayouts>
</igWPF:XamDataGrid>
</Grid>

Solution

  • Try this if you want to display the artists of the selected movie in the DataGrid:

    <igWPF:XamDataGrid Grid.Column="1" DataSource="{Binding SelectedItem.Artists, ElementName=MoviesList}">