UWP/MVVM:一个子用户控件';s ViewModel.Model继承自父对象';s ViewModel.Property
我的问题经过一段代码/XAML 型号UWP/MVVM:一个子用户控件';s ViewModel.Model继承自父对象';s ViewModel.Property,mvvm,data-binding,uwp,parent-child,datacontext,Mvvm,Data Binding,Uwp,Parent Child,Datacontext,我的问题经过一段代码/XAML 型号 public class Login { public Login() { Email = "john@gmail.com"; Password = "password"; ] public string Email { get; set; } public string Password { get; set; } } public class Customer { public C
public class Login {
public Login() {
Email = "john@gmail.com";
Password = "password";
]
public string Email { get; set; }
public string Password { get; set; }
}
public class Customer {
public Customer() {
Name = "John Smith";
Phone = "(000)000-0000";
Login = new Login();
}
public string Name { get; set; }
public string Phone { get; set; }
public Login Login { get; set; }
}
public class LoginViewModel {
public LoginViewModel(Login login) {
Model = login;
}
public Login Model { get; set; }
public string Email {
get => return Model.Email;
set => Model.Email = value;
}
public string Password {
get => return Model.Password;
set => Model.Password = value;
}
}
public class CustomerViewModel {
public CustomerViewModel(Customer customer) {
Model = customer;
}
public Customer Model { get; set; }
public Login Login {
get => return Model.Login;
set => Model.Login = value;
}
public string Name {
get => return Model.Name;
set => Model.Name = value;
}
public string Phone {
get => return Model.Phone;
set => Model.Phone = value;
}
}
<local:LoginView>
<TextBox Text="{Binding Email, Mode=TwoWay}"/>
<TextBox Text="{Binding Password, Mode=TwoWay}"/>
<local:LoginView>
<local:CustomerView>
<TextBox Text="{Binding Name, Mode=TwoWay}"/>
<TextBox Text="{Binding Phone, Mode=TwoWay}"/>
<local:LoginView/>
</local:CustomerView>
public sealed partial class CustomerView: UserControl {
public CustomerView()
{
InitializeComponent();
DataContext = new CustomerViewModel(new Customer());
}
}
视图模型
public class Login {
public Login() {
Email = "john@gmail.com";
Password = "password";
]
public string Email { get; set; }
public string Password { get; set; }
}
public class Customer {
public Customer() {
Name = "John Smith";
Phone = "(000)000-0000";
Login = new Login();
}
public string Name { get; set; }
public string Phone { get; set; }
public Login Login { get; set; }
}
public class LoginViewModel {
public LoginViewModel(Login login) {
Model = login;
}
public Login Model { get; set; }
public string Email {
get => return Model.Email;
set => Model.Email = value;
}
public string Password {
get => return Model.Password;
set => Model.Password = value;
}
}
public class CustomerViewModel {
public CustomerViewModel(Customer customer) {
Model = customer;
}
public Customer Model { get; set; }
public Login Login {
get => return Model.Login;
set => Model.Login = value;
}
public string Name {
get => return Model.Name;
set => Model.Name = value;
}
public string Phone {
get => return Model.Phone;
set => Model.Phone = value;
}
}
<local:LoginView>
<TextBox Text="{Binding Email, Mode=TwoWay}"/>
<TextBox Text="{Binding Password, Mode=TwoWay}"/>
<local:LoginView>
<local:CustomerView>
<TextBox Text="{Binding Name, Mode=TwoWay}"/>
<TextBox Text="{Binding Phone, Mode=TwoWay}"/>
<local:LoginView/>
</local:CustomerView>
public sealed partial class CustomerView: UserControl {
public CustomerView()
{
InitializeComponent();
DataContext = new CustomerViewModel(new Customer());
}
}
视图
public class Login {
public Login() {
Email = "john@gmail.com";
Password = "password";
]
public string Email { get; set; }
public string Password { get; set; }
}
public class Customer {
public Customer() {
Name = "John Smith";
Phone = "(000)000-0000";
Login = new Login();
}
public string Name { get; set; }
public string Phone { get; set; }
public Login Login { get; set; }
}
public class LoginViewModel {
public LoginViewModel(Login login) {
Model = login;
}
public Login Model { get; set; }
public string Email {
get => return Model.Email;
set => Model.Email = value;
}
public string Password {
get => return Model.Password;
set => Model.Password = value;
}
}
public class CustomerViewModel {
public CustomerViewModel(Customer customer) {
Model = customer;
}
public Customer Model { get; set; }
public Login Login {
get => return Model.Login;
set => Model.Login = value;
}
public string Name {
get => return Model.Name;
set => Model.Name = value;
}
public string Phone {
get => return Model.Phone;
set => Model.Phone = value;
}
}
<local:LoginView>
<TextBox Text="{Binding Email, Mode=TwoWay}"/>
<TextBox Text="{Binding Password, Mode=TwoWay}"/>
<local:LoginView>
<local:CustomerView>
<TextBox Text="{Binding Name, Mode=TwoWay}"/>
<TextBox Text="{Binding Phone, Mode=TwoWay}"/>
<local:LoginView/>
</local:CustomerView>
public sealed partial class CustomerView: UserControl {
public CustomerView()
{
InitializeComponent();
DataContext = new CustomerViewModel(new Customer());
}
}
如您所见,我在CustomerView中声明了一个LoginView实例,我需要的是将LoginView.ViewModel.Model绑定到CustomerView.ViewModel.Login;这不是一个实际的用例。这只是为了说明父子绑定关系。我需要能够将父视图的ViewModel的属性绑定到子视图的ViewModel的模型
我可以在父视图的ViewModel中创建一个子ViewModel,然后将其绑定到子视图的DataContext,但是复杂的ViewModels很快就会变得混乱。我更愿意简单地传递父母的属性,成为其子女的榜样
我最终能弄明白这一点,但花了几天时间浏览在线帖子、阅读书籍和教程,我准备寻求帮助 您不会喜欢这个答案,但应该将子视图模型放到父视图模型中,然后将其绑定到用户控件。这是最简单的方法。其他的选择更为粗糙。谢谢你的回复。我想你可能是对的。