【发布时间】:2020-10-13 18:11:05
【问题描述】:
我有一个数据网格,当我选择一条线时,它将更新另外两个数据网格。它在初始负载上运行良好。但是当我选择刷新按钮并在 MVVM 模型中重新加载项目源时,Selection Changed 标志直到第二次选择后才会触发。
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 Bindable 集合。 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;
}
}
在初始加载时效果很好。 The initial index is preselected to 0. When select the next line the other two table refresh.在我点击刷新按钮之后。索引重置为 0。我单击下一行没有任何反应。然后我单击另一行,一切都正确刷新。然后我工作,直到我再次单击刷新。看起来所选值最初没有正确设置,并且第一次轻弹第一次设置它。我想尽量保持 MVVM 格式,尽可能不使用后面的代码。
【问题讨论】: