我有多个concat
,其中包含共享的# MERGE AND AGGREGATION
df_temp = df_multi.reset_index().merge(df_single.reset_index(), on='Product', suffixes=['','_'])\
.groupby(['Product', 'Scenario', 'Time_'])['Quantity_'].max()\
.reset_index().rename(columns={'Time_':'Time','Quantity_':'Quantity'})
# ROW BIND CONCATENATION
df_final = pd.concat([df_multi.reset_index(), df_temp])\
.sort_values(['Product','Scenario', 'Time'])\
.set_index(['Product', 'Scenario'])[['Time', 'Quantity', 'Price']]
print(df_final)
# Time Quantity Price
# Product Scenario
# A A1 -3 100 NaN
# A1 -2 100 NaN
# A1 -1 100 NaN
# A1 0 234 2002.0
# A1 1 324 2550.0
# A1 2 345 3207.0
# A1 3 458 4560.0
# A2 -3 100 NaN
# A2 -2 100 NaN
# A2 -1 100 NaN
# A2 0 569 1980.0
# A2 1 657 2314.0
# A2 2 768 4568.0
# A2 3 823 5761.0
。
这是UserControl
,用户点击一行查看行的详细信息(实际结构更复杂)。
问题是当我处理网格中的ViewModel
时,我更新了共享DataGrid
以更新ContactDetail但它没有更新SelectionChanged
中的值(对象)在ContactDetail中更新,但不显示值。
ListContact.xaml.cs
ViewModel
ContactDetail.xaml.cs
TextBoxes
ContactDetail.xaml
public void contactsTable_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
contacts.current_identity = //Get the associated `IdentityViewModel`
}
ContactsViewModel.cs (IdentityViewModel使用相同的结构)
public partial class ContactDetail : UserControl
{
public ContactsViewModel contacts;
public DetailContact(ContactsViewModel contacts)
{
InitializeComponent();
this.contacts = contacts;
this.DataContext = contacts;
}
}
问题是,为什么这不起作用以及如何通知 <UserControl x:Class="ContactDetail">
<TextBox Name='address' Text="{Binding Path=contacts.current_identity.address, Mode=TwoWay}"/>
<TextBox Name='phone' Text="{Binding Path=contacts.current_identity.phone, Mode=TwoWay}"/>
<TextBox Name='email' Text="{Binding Path=contacts.current_identity.email, Mode=TwoWay}"/>
</UserControl>
以便它显示新值?
答案 0 :(得分:2)
您的联系人数据发生了变化,但绑定中仍然引用了原始参考位置Binding Path=contacts.current_identity.address
。 I.E. address
仍然有效且未更改。改变的是contacts.current
,但你没有约束力。
请记住,绑定只是对位置引用的反映。如果原始address
发生了更改,您会看到更改,因为这是正在寻找更改的内容。但是,父实例改变了。
您需要重构绑定,以便在current_identity
更改时进行正确更新。