WPF MVVM我想从另一个窗口ViewModel带来数据并使用它



我正在使用WPF MVVM模式创建一个客户服务程序我创建了一个注册窗口和一个客户信息窗口我想把客户信息窗口的数据网格的值带入创建窗口的文本框

这是信息ViewModel

public class MainViewModel : ObservableObject
{
private MemberInfo selectedCustomer = new MemberInfo();

public MemberInfo SelectedCustomer
{
get => selectedCustomer;
set
{   
SetProperty(ref selectedCustomer, value);
RegisterViewModel RV = new RegisterViewModel();
if (value != null)
{
RV.Name = selectedCustomer.Name;
}
}
}
}

这是create ViewModel

public class RegisterViewModel : ObservableObject
{
private string name = "";
public string Name
{
get => this.name;
set => SetProperty(ref this.name, value);
}
}

如果我像这样使用它,值只经过set,并且没有值来执行get

如果我像这样使用它,则值只经过set,并且没有值来执行get

不完全确定我是否理解正确,但是您可以将MemberInfo对象传递给RegisterViewModel的构造函数,并通过只读属性将其公开给视图。

因此,RegisterViewModel变成:

public class RegisterViewModel : ObservableObject
{
public RegisterViewModel(MemberInfo member)
{
Member = member;
}
public MemberInfo Member { get; }
}

因此在MainViewModel中:

public MemberInfo SelectedCustomer
{
get => selectedCustomer;
set
{   
SetProperty(ref selectedCustomer, value);
RegisterViewModel RV = new RegisterViewModel(selectedCustomer);
}
}

视图绑定到:

Text = "{Binding Path=Member.Name, Mode=TwoWay}"

编辑

由于RegisterViewModel期望MemberInfo对象,您不能注册它并简单地调用GetService<T>方法。

在这种情况下,我通常使用ActivatorUtilities。创建实例,它是Microsoft.Extensions.DependencyInjection.Abstractions包的一部分。

通过扩展方法:

public static T Create<T>(this IServiceProvider provider, params object[] args) where T : class
{
return ActivatorUtilities.CreateInstance<T>(provider, args);
}

可以调用:

this.DataContext = App.Current.Services.Create<RegisterViewModel>(member);

这样,如果RegisterViewModel期望通过构造函数注册额外的服务,这些服务将由容器解析。

最新更新