UserControl
には共有されたViewModel
が含まれています。複数のUserControlでのWPF TwoWayバインディング
これは、ユーザーが(実際の構造はより複雑である)行の詳細を見るために行をクリックDataGrid
です。
問題は、私は、グリッドにSelectionChanged
を扱うとき、私はContactDetailを更新するために共有ViewModel
を更新したが、それは(オブジェクトがContactDetailに更新されますが、値は表示されません)TextBoxes
で値を更新しないです。
ListContact.xaml.cs
public void contactsTable_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
contacts.current_identity = //Get the associated `IdentityViewModel`
}
ContactDetail.xaml.cs
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>
ContactDetail.xaml ContactsViewModel.cs(IdentityViewModelは同じ構造を使用しています)
public class ContactsViewModel : INotifyPropertyChanged
{
private List<Contact> _contacts;
public List<Contact> contacts;
{
get { return _contacts; }
set { _contacts = value; OnPropertyChanged("contacts"); }
}
private IdentityViewModel _current_identity;
public IdentityViewModel current_identity
{
get { return _current_identity; }
set { _current_identity = value; OnPropertyChanged("current_identity"); }
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
は疑問は、なぜ動作しないのは、どのように新しい値が表示されるようにContactDetail
に通知するのですか?
参照( "ポインタ")自体を変更しない限り、参照型のインスタンスを 'ref'で渡す必要はありません。 'class'インスタンスは常に参照渡しされ、' struct'がコピーされます。 – dymanoid
あなたのビューモデルは、必要なときに 'PropertyChanged'イベントを起こしていますか?あなたのビューモデルを投稿してください。 – dymanoid
@dymanoid編集されています。 – BadMiscuit