型号:
class UserModel
{
public string FirstName { get; set; }
}
服务:
class UserService
{
private async Task<string> DirectoryEntry()
{
SearchResult rs = await Task.Run(() =>
{
DirectoryEntry de = new DirectoryEntry("xxx");
DirectorySearcher ds = new DirectorySearcher(de)
{
Filter = "(&((&(objectCategory=Person)(objectClass=User)))(sAMAccountName=" + "xxx" + "))",
SearchScope = SearchScope.Subtree
};
return ds.FindOne();
});
var value = (rs.GetDirectoryEntry().Properties["businessCategory"].Value ?? "BRAK").ToString();
return value;
}
}
ViewModel:
class UserViewModel : INotifyPropertyChanged
{
UserModel user = new UserModel();
public string FirstName
{
??
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChange(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
那么,如何将value
传递给ViewModel?
我检查了一些示例,但在Service和VM之间无法实现。
我完全不知道如何在它们之间建立联系。
还是对mvvm的使用不正确?
答案 0 :(得分:1)
假设您的服务方法实际上返回了一个值,则视图模型可以使用该值执行任何所需的操作,例如将其分配给UserModel
的属性或假定类型匹配的自身属性。 / p>
通常,视图模型具有对服务的引用:
class UserViewModel : INotifyPropertyChanged
{
readonly UserService service = new UserService();
//call a method on the service in any method of the view model
}
在上面的代码中,视图模型强烈引用了服务的实现。使用服务实现的接口注入视图模型更为常见:
class UserViewModel : INotifyPropertyChanged
{
readonly IUserService _service;
public UserViewModel(IUserService service) => _service = service;
}
然后可以在运行时切换实现。例如,您可能想使用服务模拟来测试视图模型,但是在运行实际应用程序时使用“真实”服务实现。