Q:

WPF Combobox SelectedItem data persistance fail

I've been trying to solve this issue for one day and still no success. I am looking for an advice where to move next.
Problem is that every time when I select an item from comobobox the value in ViewModel (VM) has been changed but right when I trigger RelayCommand (in the same VM), selected item disappear (property is null).
Things get complicated when I have user control (UC) which embeds another user control where is mentioned combobox control.
My xaml of parent user control is:
<UserControl 
xmlns:lookupPageControl="clr-namespace:LookupPageControl;assembly=LookupPageControl"  x:Class="SelectedLookupsControl.SelectedLookups"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  mc:Ignorable="d" 
  d:DesignMinWidth="300"
DataContext="{Binding SelectedLookupsPageViewModel, RelativeSource={RelativeSource Self}}">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="150"/>
        <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions>
    <ScrollViewer Margin="0,0,5,0" Grid.Column="0" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
        <ListBox Padding="2" SelectionMode="Single" SelectedIndex="0" ItemsSource="{Binding SelectedLookups}" SelectedItem="{Binding SelectedLookupPage}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=LookupViewModel.LookupName}" ToolTip="{Binding Path=LookupViewModel.Description}" ></TextBlock>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </ScrollViewer>
    <GridSplitter Grid.Column="0" Background="Gray" Width="5" HorizontalAlignment="Right" VerticalAlignment="Stretch"  ResizeBehavior="CurrentAndNext"/>
    <DockPanel Grid.Column="1">
        <Border DockPanel.Dock="Top">
            <TextBlock Margin="5,0,5,0" Text="{Binding Path=SelectedLookupPage.LookupViewModel.LookupName}"/>
        </Border>
        <Border Padding="2">
            <StackPanel HorizontalAlignment="Left">
                <lookupPageControl:LookupPage DataContext="{Binding SelectedLookupPage}" />
            </StackPanel>
        </Border>
    </DockPanel>
</Grid>

Parent's DataSource is taken from code behind ( I have a reason for this, don't judge me :))
View Model hierarchy looks like so (parent VM is the root):
+ SelectedLookups : SelectedLookupsViewModel
+-- SelectedLookupPage : LookupPageViewModel
    |-- Lookup : LookupViewModel
    +-- LookupSchema : LookupSchemaViewModel
        +-- LookupAxisLabel : IEnumerable<LookupAxisLabelViewModel>
            |-- Label : String
            +-- LookupAxis : LookupAxisViewModel
                |-- LookupAxisIndex : IList<LookupAxisIndexViewModel>
                +-- SelectedLookupAxisIndexViewModel : LookupAxisIndexViewModel
                    |--- LookupAxisIndexId : int
                    |--- DisplayName : string
                    |--- SequenceNumber : int

Where child UC property DataContext has been used as gateway for embedded VM (parent contains child's VM).
My Child user control consumes SelectedLookupPage property and with binding maps data from VM to controls (all works fine, all data is displayed):
<UserControl x:Class="LookupPageControl.LookupPage"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:viewModels="clr-namespace:PELookup.ViewModels;assembly=PELookup"
         mc:Ignorable="d" 
         d:DesignMinHeight="100" d:DesignMinWidth="320" >
<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Resources/Converters.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
<DockPanel>
    <StackPanel>
        <Grid VerticalAlignment="Center">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <RadioButton Padding="5,0,5,0" Margin="5,10,0,0" Name="SelectFileRBtn" Grid.Column="0" GroupName="Option1" VerticalAlignment="Center" Content="Select file to import"  Grid.Row="1" IsChecked="{Binding SelectedLookupHandlingOption, Converter={StaticResource BoolToLookupPageSelectedTypeEnum}, Mode=TwoWay, ConverterParameter=SelectedFileToImport}" />
            <RadioButton Padding="5,0,5,0" Margin="5,10,0,0" Name="OnePropRBtn" Grid.Column="0" GroupName="Option2" VerticalAlignment="Center" Content="Change one property" Grid.Row="5" IsChecked="{Binding SelectedLookupHandlingOption, Converter={StaticResource BoolToLookupPageSelectedTypeEnum}, Mode=TwoWay, ConverterParameter=ChangeOneProperty}" />
            <TextBox Grid.Column="0" Margin="15,10,0,0" Grid.Row="2" Width="200" HorizontalAlignment="Left" IsEnabled="{Binding IsEnabledSelectFile}" Name="FilePathTxt" Text="{Binding FilePath, UpdateSourceTrigger=PropertyChanged}" />
            <Button Grid.Column="1" Margin="0,10,5,0" Grid.Row="2" Width="100" HorizontalAlignment="Left" IsEnabled="{Binding IsEnabledSelectFile}" Click="Button_Click" >Open File</Button>
            <Button Grid.Column="2" Margin="0,10,5,0" Grid.Row="2" Width="100" HorizontalAlignment="Left" IsEnabled="{Binding IsSendButtonEnabled}" Command="{Binding SendFileCmd}" >Send</Button>
            <GroupBox Visibility="{Binding ProgressBarGroupVisibility}" Margin="5,10,5,0" Header="Lookup file upload" Grid.Row="3" Grid.ColumnSpan="3" Grid.Column="0">
                <WrapPanel Margin="5"  >

                    <ProgressBar Margin="0,5,0,5" HorizontalAlignment="Stretch" Orientation="Horizontal" Visibility="Visible" Height="10" IsIndeterminate="{Binding IsFileSendProgressBarIsIndeterminate}" 
                              Minimum="0" Maximum="100" Value="{Binding FileSendProgressBarValue}" Width="300" Name="FileSendProgressBar" />
                    <Image Margin="10,0,0,0" Visibility="{Binding ElementName=FileSendProgressBar, Path=Value, Converter={StaticResource IntToVisibilityConverter}, Mode=OneWay}" Source="{Binding IsFileSentSuccess, Converter={StaticResource BoolToPathFileSuccFailConverter}}" Height="30" />

                </WrapPanel>
            </GroupBox>
            <GroupBox Visibility="{Binding IsFileSentSuccess, Converter={StaticResource BoolToVisibilityCollapsedConverter}}" Margin="5,5,5,0" Header="Lookup processing" Grid.Row="4" Grid.ColumnSpan="3" Grid.Column="0">
                <WrapPanel Margin="5"  >

                <ProgressBar Margin="0,5,0,5" HorizontalAlignment="Stretch" Orientation="Horizontal" Visibility="{Binding IsSendFileProgressBarVisible, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}" Height="10" IsIndeterminate="{Binding IsProgressBarIsIndeterminate}" 
                              Minimum="0" Maximum="100" Value="{Binding ImportedFileProgress}" Width="300" Name="LookupProcessingProgressBar" />
                    <Image Margin="10,0,0,0" Visibility="{Binding ElementName=LookupProcessingProgressBar, Path=Value, Converter={StaticResource IntToVisibilityConverter}, Mode=OneWay}" Source="Images\success.png" Height="30" />

                </WrapPanel>
            </GroupBox>

        </Grid>
        <StackPanel IsEnabled="{Binding IsEnabledChangeOneProp}">
            <GroupBox Margin="5,10,5,0" Header="Lookup Axis">
                <ItemsControl Margin="5,0,5,0" ItemsSource="{Binding Path=LookupSchema.LookupAxisLabel}" >
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                </Grid.RowDefinitions>
                                <Label MinWidth="100" Grid.Column="0" Grid.Row="0" Content="{Binding Label}" VerticalAlignment="Bottom" Padding="5,5,5,0" />
                                <ComboBox MinWidth="100" Grid.Column="1" Grid.Row="0" Height="Auto" Name="cmbName" IsSynchronizedWithCurrentItem="True" 
                                          SelectedItem="{Binding Path=LookupAxis.SelectedLookupAxisIndexViewModel, Mode=TwoWay}"  
                                  ItemsSource="{Binding Path=LookupAxis.LookupAxisIndex}" VerticalAlignment="Top" Padding="5,5,5,0">
                                    <TextSearch.TextPath>DisplayName</TextSearch.TextPath>
                                    <ComboBox.ItemTemplate>
                                        <DataTemplate>
                                            <TextBlock DataContext="{Binding}">
                                                <TextBlock.Text>
                                                    <MultiBinding StringFormat="{}{0}">
                                                        <!--<Binding Path="SequenceNumber" />-->
                                                        <Binding Path="DisplayName" />
                                                    </MultiBinding>
                                                </TextBlock.Text>
                                            </TextBlock>
                                        </DataTemplate>
                                    </ComboBox.ItemTemplate>
                                </ComboBox>
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>

            </GroupBox>
            <Button Margin="5,10,5,0" Width="100" HorizontalAlignment="Right" Command="{Binding GetLookupCellsCmd}" IsEnabled="{Binding IsGetLookupDataBtnEnabled}" >Get lookup data</Button>
            <DataGrid Name="CellResultDataGrid" Margin="5,10,5,0" ItemsSource="{Binding Path=LookupCellsResultData}" Visibility="{Binding Path=LookupCellSearchViewModel, Converter={StaticResource NullGridToGridVisibility}}" IsTextSearchEnabled="True" IsTextSearchCaseSensitive="False"
                  CanUserSortColumns="True" CanUserAddRows="False" AutoGeneratingColumn="CellResultDataGrid_AutoGeneratingColumn" />
            <Button Margin="5,10,5,5" Width="100" HorizontalAlignment="Right" Command="{Binding SaveLookupCellsCmd}" IsEnabled="{Binding IsSaveCellBtnEnabled}" Visibility="{Binding ElementName=CellResultDataGrid, Path=Visibility}" >Save</Button>
        </StackPanel>
    </StackPanel>
</DockPanel>

Unfortunately, when selectedItem value get changed (value in VM get changed too) in that time when I call RelayCommand obj to update another data where I need to know what for item user is selected, value is null.
Made me wonder, if DataSource property of embedded UC is not having a permission rejection to update VM which is part of parent VM (embedded). Then I tried to load the component from code behind, where entire parent VM was been injected into child UC and I ended up with the same behavior.
For some reason looks like combobox control is making my life harder. 
Could someone help me, please.
FYI the way how I get "LookupSchema" property populated:
 public LookupSchemaViewModel LookupSchema
    {
        get
        {
            if (_lookupSchema == null)
            {
                Task.Run(() => UpdateLookupSchema());
            }

            return _lookupSchema;
        }
        set
        {
            SetProperty(ref _lookupSchema, value);                
        }
    }

When you clicked on button "Get lookup data", another command has been used to trigger thread which does a call of "GetLookupCells" method as below:
private void GetLookupCells(object obj)
    {
        try
        {
            lock (Lock)
                IsInProgress = true;

            lock (LookupSchema)
            {
                var x =
                    LookupSchema.LookupAxisLabel.FirstOrDefault(
                        axi => axi.LookupAxis.AxiSequenceIndex == (int)LookupAxiSequenceIndexEnum.X);
                var y =
                    LookupSchema.LookupAxisLabel.FirstOrDefault(
                        axi => axi.LookupAxis.AxiSequenceIndex == (int)LookupAxiSequenceIndexEnum.Y);
                var z =
                    LookupSchema.LookupAxisLabel.FirstOrDefault(
                        axi => axi.LookupAxis.AxiSequenceIndex == (int)LookupAxiSequenceIndexEnum.Z);

                LookupCellSearchViewModel = _lookupRestAPIService.GetCellSearch(LookupViewModel.LookupId,
                    x != null ? x.LookupAxis.SelectedLookupAxisIndexViewModel.DisplayName : String.Empty,
                    y != null ? y.LookupAxis.SelectedLookupAxisIndexViewModel.DisplayName : String.Empty,
                    z != null ? z.LookupAxis.SelectedLookupAxisIndexViewModel.DisplayName : String.Empty)
                    .ToLookupCellSearchViewMolel();

                // subscribe on value change to update "save cell value button"
                LookupCellSearchViewModel.LookupCells.ToList().ForEach(item=>item.ToList().ForEach(vm=>vm.PropertyChanged +=
                    (sender, args) => RaisePropertyChanged(() => IsSaveCellBtnEnabled)));
            }
        }
        catch (Exception ex)
        {
            lock (ErrorMessage)
                ErrorMessage = ex.Message;
        }
        finally
        {
            lock (Lock)
                IsInProgress = false;
        }
    }

How it looks like in the picture:

A:

Ok, after playing around with my VMs I realized that my collection of "LookupAxisLabel" is not type of observable collection.
After this change all works well.
Thanks everyone for a comments, appreciate it.

