WPF TwoWay绑定在多个UserControl中

时间:2017-11-30 16:45:21

标签: c# wpf user-controls inotifypropertychanged

我有多个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

Overview here

这是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> 以便它显示新值?

1 个答案:

答案 0 :(得分:2)

您的联系人数据发生了变化,但绑定中仍然引用了原始参考位置Binding Path=contacts.current_identity.address。 I.E. address仍然有效且未更改。改变的是contacts.current,但你没有约束力。

请记住,绑定只是对位置引用的反映。如果原始address发生了更改,您会看到更改,因为这是正在寻找更改的内容。但是,父实例改变了。

您需要重构绑定,以便在current_identity更改时进行正确更新。