So I am reallly confused here.
I created a datagrid, bound its itemsource two way and bound its selected item two way. The selected item getter gets called but the setter never does. All the pieces seem to be here. What am I missing?
<DataGrid ItemsSource="{Binding Properties ,Mode=TwoWay}"
SelectedItem="{Binding SelectedProperty ,Mode=TwoWay}"
CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False" Background="LightBlue">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="Address" Binding="{Binding Address}"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}"
SelectedItem="{Binding SelectedUnit, Mode=TwoWay}"
CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False">
My first datagrid works fine including the selected item.
The second third and fourth nested grids however don't bind to the selected item. The items sources work but that is it
public class PropertyModel : ModelBase
{
private ObservableCollection<UnitModel> _Units;
public ObservableCollection<UnitModel> Units
{
get { return _Units; }
set { _Units = value; }
}
private UnitModel _SelectedUnit;
public UnitModel SelectedUnit
{
get { return _SelectedUnit; }
set { _SelectedUnit = value; OnPropertyChanged("SelectedUnit"); }
}
There are no binding expression errors or any other errors displayed in the output window.
The answer to this is pretty obvious actually.
I forgot to put UpdateSourceTrigger=PropertyChanged
so it should look like this
<DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}"
SelectedItem="{Binding SelectedUnit,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False">
This solved the problem
I faced something similar to that a couple of months ago, for some reason the inner DataGrid
ItemSource
wasn't set correctly using that way, i managed to fix that by binding using ElementName
to set the RowDetail DataGrid
ItemSource
to the SelectedItem
in the parent one :
<DataGrid x:Name="DataGrid" ItemsSource="{Binding Properties ,Mode=TwoWay}"
SelectedItem="{Binding SelectedProperty ,Mode=TwoWay}"
CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False" Background="LightBlue">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="Address" Binding="{Binding Address}"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding SelectedItem.Units ,Mode=TwoWay,ElementName=DataGrid}"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With