C# 当我刷新datagrid时;“选定值”;don';在第二次单击之前,请不要更改

C# 当我刷新datagrid时;“选定值”;don';在第二次单击之前,请不要更改,c#,wpf,C#,Wpf,我有一个数据网格,当我选择一条线时,它将更新另外两个数据网格。它在初始载荷下工作良好。但是,当我选择刷新按钮并在MVVM模型中重新加载项目源时,选择更改标志直到第二次选择之后才会触发 Visual Studio 2019,c#,MVVM格式的WPF,使用Dapper和Caliburn.Micro ShellView模型:按钮逻辑 public void BTN_RefreshHoldOrder() { CheckIfRefreshing =

我有一个数据网格,当我选择一条线时,它将更新另外两个数据网格。它在初始载荷下工作良好。但是,当我选择刷新按钮并在MVVM模型中重新加载项目源时,选择更改标志直到第二次选择之后才会触发

Visual Studio 2019,c#,MVVM格式的WPF,使用Dapper和Caliburn.Micro

ShellView模型:按钮逻辑

        public void BTN_RefreshHoldOrder()
        {
           CheckIfRefreshing = 1; 
           DG_HoldOrders.Clear();
           DG_HoldOrders = LoadDataGridHoldOrders();
 
            // Added these two lines to see if it would help the selected line value to auto change on first click       
           SelectedHoldOrder = DG_HoldOrders[0];
           SelectedHoldOrderIndex = 0;

// next 2 line manual reload of second table to get it to respond
            DG_Notes.Clear();
            DG_Notes = LoadDataGridNotes(SelectedOrderNoteId, SelectedCustNoteId, SelectedCustomerId, SelectedOrderNumber);

            CheckIfRefreshing = 1;

        }

此按钮为数据网格重新加载DG_HoldOrders可绑定集合。 ShellView数据网格在这里

 <DataGrid ItemsSource="{Binding Path=DG_HoldOrders, Mode=OneWay}" 
                  Grid.Row="3" 
                  Grid.RowSpan="1"
                  Grid.Column="1" 
                  Grid.ColumnSpan="8"
                  AutoGenerateColumns="False"
                  CanUserAddRows="False"
                  SelectedValue="{Binding Path=SelectedHoldOrder, Mode=OneWayToSource}" 
                  SelectedIndex="{Binding Path=SelectedHoldOrderIndex, Mode=TwoWay}" 
             
                  SelectionMode="Single"
                  Name="DG_HoldOrder" Loaded="DG_HoldOrder_Loaded"
                  >

所选值被推回SelectedHoldOrder。 当这种情况发生时,它会更新其他数据网格

 private HoldOrder _selectedHoldOrder = new HoldOrder();
public HoldOrder SelectedHoldOrder
        {
            get 
            { 
                return _selectedHoldOrder; 
            }
            set 
            { 
                _selectedHoldOrder = value;
               //var TestNotes = new BindableCollection<HoldOrder>();
                if (CheckIfRefreshing == 0)
                {
                                     
                    
                    if (SelectedHoldOrder.SOID.ToString() != null)
                    {

                        SelectedCustNoteId = SelectedHoldOrder.CustomerNoteId;
                        SelectedCustomerId = SelectedHoldOrder.CustomerID.ToString();
                        SelectedOrderNoteId = SelectedHoldOrder.OrderNoteId;
                        SelectedOrderNumber = SelectedHoldOrder.SONumber;

                        DG_Notes.Clear();

                        var TestNotes = LoadDataGridNotes(SelectedOrderNoteId, SelectedCustNoteId, SelectedCustomerId, SelectedOrderNumber);

                        DG_Notes = TestNotes;
                        SelectedNotesIndex = 0;

                        DG_Contacts.Clear();
                        DG_Contacts = LoadDataGridContacts(SelectedCustomerId);
                        SelectedContactIndex = 0;
                    }

                }
                
                NotifyOfPropertyChange(()=>SelectedHoldOrder);
                CheckIfRefreshing = 0;
            }
        }
private HoldOrder _selectedHoldOrder=new HoldOrder();
public HoldOrder Selected HoldOrder
{
得到
{ 
返回_selectedHoldOrder;
}
设置
{ 
_selectedHoldOrder=值;
//var TestNotes=new BindableCollection();
如果(检查刷新==0)
{
if(SelectedHoldOrder.SOID.ToString()!=null)
{
SelectedCustNoteId=SelectedHoldOrder.CustomerNoteId;
SelectedCustomerId=SelectedHoldOrder.CustomerID.ToString();
SelectedOrderNodeId=SelectedHoldOrder.OrderNoteId;
SelectedOrderNumber=SelectedHoldOrder.sonNumber;
DG_Notes.Clear();
var TestNotes=LoadDataGridNotes(SelectedOrderNoteId、SelectedCustNoteId、SelectedCustomerId、SelectedOrderNumber);
DG_注释=测试注释;
SelectedNotesIndex=0;
DG_触点。清除();
DG_Contacts=LoadDataGridContacts(SelectedCustomerId);
SelectedContactIndex=0;
}
}
NotifyOfPropertyChange(()=>SelectedHoldOrder);
CheckIfRefreshing=0;
}
}

在初始负载时,它工作良好。初始索引被预选为0。选择下一行时,其他两个表将刷新。在我按下刷新按钮之后。索引被重置为0。我点击下一行,什么也没发生。然后单击另一行,所有内容都会正常刷新。然后我继续工作,直到再次单击“刷新”。看起来选择的值最初没有正确设置,而第一次轻弹第一次设置了它。我希望尽量保持MVVM格式,如果可能的话,不要使用代码隐藏。

在XAML中添加IsSynchronizedWithCurrentItem=true。如果为true,则将使所选项目与当前项目保持同步


在“刷新按钮逻辑”中,我没有关闭“检查是否刷新”选项,因此在第一次单击并重置值之前,零件不会运行

CheckIfRefreshing = 1;

<refresh logic>

CheckIfRefreshing = 0;
checkifreshing=1;
CheckIfRefreshing=0;

IsSynchronizedWithCurrentItem=“True”
逻辑使问题变得更糟,因此我将其删除。

谢谢,我添加了代码,但仍然有相同的症状。我认为这是解决方案的一部分,但现在页面加载时,子数据网格不会填充。我还是缺少一些东西。
CheckIfRefreshing = 1;

<refresh logic>

CheckIfRefreshing = 0;