Вы можете использовать EventAggregators для достижения этой цели.
Для тех, кто незнаком, Event Aggregator - это служба, которая предоставляет возможность публиковать объект от одного объекта к другому свободно основанным образом.
blockquote>Подробнее об агрегаторах событий можно прочитать здесь
Вы начинаете с определения своего CustomMessage, которое будет содержать сообщение, которое нужно передать.
public class CustomMessage { public string String1 { get; set; } }
Теперь вы переходите к ParentViewModel и создаете экземпляр агрегатора событий.
private IEventAggregator _eventAggregator; [ImportingConstructor] public ShellViewModel(IEventAggregator eventAggregator) { _eventAggregator = eventAggregator; _eventAggregator.Subscribe(this); }
В установщике вашего свойства, которое привязано к вашему текстовому полю, вы теперь добавите код для публикации сообщения с помощью Event Aggregator.
Например,
public string String1 { get => _string1; set { if (_string1.Equals(value)) return; _string1 = value; _eventAggregator.PublishOnUIThread(new CustomMessage { String1 = _string1, }); } }
Теперь вы направляетесь к своей модели детского представления и подписываетесь на агрегатор событий.
private IEventAggregator _eventAggregator; [ImportingConstructor] public SecondWinViewModel(IEventAggregator eventAggregator) { _eventAggregator = eventAggregator; _eventAggregator.Subscribe(this); }
Чтобы подписаться на конкретное сообщение (в данном случае CustomMessage), вам необходимо реализовать интерфейс IHandle.
[Export(typeof(SecondWinViewModel))] public class SecondWinViewModel : Screen, IHandle
Для интерфейса требуется один метод, который вы бы использовали для получения сообщения и обновления обязательного свойства в вашем дочернем окне.
public void Handle(CustomMessage message) { String1 = message.String1; NotifyOfPropertyChange(nameof(String1)); }
Вы можете сделать то же самое для нескольких параметров, добавив больше свойств в ваше CustomMessage. Таким же образом вы можете передавать сообщения от Child Vm к Parent Vm.
Нет, необходимо вызвать функцию Win32 API LogonUser для возвращения, окна считают маркер, таким образом, можно затем явиться олицетворением.
Вы можете выдать себя за пользователя без ввода пароля, вызвав ZwCreateToken. См. Функцию CreatePureUserToken в этой статье: RunAsEx на основе графического интерфейса Чтобы это работало, вы должны работать как администратор (или LocalSystem).
Другой способ - использовать пакеты субаутентификации Windows. Это позволяет вам переопределить встроенную проверку подлинности Windows и позволить LogonUser успешно выполнить, даже если пароль не был предоставлен. См. Эту статью базы знаний .