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