UWP/MVVM:一个子用户控件';s ViewModel.Model继承自父对象';s ViewModel.Property

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

我的问题经过一段代码/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 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很快就会变得混乱。我更愿意简单地传递父母的属性,成为其子女的榜样


我最终能弄明白这一点,但花了几天时间浏览在线帖子、阅读书籍和教程,我准备寻求帮助

您不会喜欢这个答案,但应该将子视图模型放到父视图模型中,然后将其绑定到用户控件。这是最简单的方法。其他的选择更为粗糙。谢谢你的回复。我想你可能是对的。