Мне нужно знать дескриптор окна из модели презентации - PullRequest
3 голосов
/ 22 мая 2011

Я знаю, что это анти-паттерн - иметь специфичные для WPF соединения с моделью презентации. Но в этом случае я не могу этого избежать (я использую SLIM DX для ввода данных с джойстика, и для этого требуется ручка).

Так есть ли способ из модели представления, чтобы получить дескриптор окна, связанного с моделью?

Спасибо

Ответы [ 2 ]

1 голос
/ 22 мая 2011

Если я понимаю, если ваша модель представления наследуется от Screen, вы можете вызвать GetView, привести его к типу вашего представления и получить доступ к элементу управления в представлении.

var myView = GetView() as OrderView;
myView.SlimDX ...

В качестве альтернативы, если вы не хотите ссылаться на свой взгляд из виртуальной машины, возможно, вы сможете сделать то, что вам нужно, в сопрограмме.

"Это довольно простой для реализации интерфейс. Просто напишите свой код в методе" Execute "и обязательно вызовите событие" Completed ", когда вы закончите, будь то синхронная или асинхронная задача. Поскольку возникают сопрограммы внутри Action мы предоставляем вам ActionExecutionContext, полезный при создании реализаций IResult, связанных с пользовательским интерфейсом, что позволяет ViewModel декларативно заявлять о своих намерениях при управлении представлением, не имея никакой ссылки на View или необходимости в модуле на основе взаимодействия. тестирование. Вот как выглядит ActionResultContext: "

public class ActionExecutionContext
{
    public ActionMessage Message;
    public FrameworkElement Source;
    public object EventArgs;
    public object Target;
    public DependencyObject View;
    public MethodInfo Method;
    public Func<bool> CanExecute;
    public object this[string key];
}

http://caliburnmicro.codeplex.com/wikipage?title=IResult%20and%20Coroutines&referringTitle=Documentation

0 голосов
/ 26 мая 2011

У вас есть два варианта выше, но также имейте в виду, что Handle не устанавливается, пока не будет запущен OnViewLoaded, поэтому убедитесь, что вы прочитали дескриптор после этого.

...