Lo arregle usando una variable en las propiedades, no se si es la mejor forma pero funciono así.
namespace TesteoWPF
{
public class TesteoVM : INotifyPropertyChanged
{
private ObservableCollection<TesteoM> _test = new ObservableCollection<TesteoM>()
{
new TesteoM(){ Name = "A", Val1 = 1, Val2 = 1, ID = 0},
new TesteoM(){ Name = "B", Val1 = 2, Val2 = 2, ID = 1}
};
public TesteoVM()
{
_selectedTest = new TesteoM();
}
public ObservableCollection<TesteoM> Test => _test;
private TesteoM _selectedTest;
private bool _checking1;
public TesteoM SelectedTest
{
get => _selectedTest;
set
{
if(_selectedTest!= value)
{
if (!_checking1)
{
_selectedTest = value;
MyVal1 = SelectedTest.Val1;
}
}
_selectedTest = value;
OnPropertyChanged(nameof(SelectedTest));
}
}
private int _selectedIndex;
public int SelectedIndex
{
get => _selectedIndex;
set
{
_selectedIndex = value;
OnPropertyChanged(nameof(SelectedIndex));
}
}
private int myVal1;
public int MyVal1
{
get => myVal1;
set
{
if(myVal1 != value)
{
_checking1 = true;
myVal1 = value;
if(_checking1 == true)
{
SelectedIndex = myVal1;
_checking1 = false;
}
}
myVal1 = value;
OnPropertyChanged(nameof(MyVal1));
}
}
private int myVal2;
public int MyVal2
{
get => myVal2;
set
{
myVal2 = value;
OnPropertyChanged(nameof(MyVal2));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}