Установка DataContext для корневого элемента в XAML без синтаксиса элемента свойства - PullRequest
0 голосов
/ 12 октября 2009

Мне было интересно, можно ли написать что-то вроде этого:

<Window 
    ... xmlns definitions ...
    DataContext=<!--Create an instance here-->
></Window>

Вместо этого:

<Window 
    ... xmlns definitions ...
>
   <Window.DataContext>
        <local:CustomViewModel />
   </Window.DataContext>
</Window>

Мне не нужны обходные пути для достижения того же эффекта, мне просто любопытно, возможен ли вообще первый тип синтаксиса. Я не думаю, что это так, но стоит спросить.

Ответы [ 2 ]

2 голосов
/ 12 октября 2009

Единственный способ убедиться в этом - написать свой собственный MarkupExtension, который использует Activator.CreateInstance (или ваш DI-контейнер) для создания виртуальной машины, что дает у вас такой синтаксис:

<UserControl DataContext="{CreateNew local:CustomViewModel}"
0 голосов
/ 12 октября 2009

Как насчет DataContext = "{x: Static SomeClass.SomeProperty}", а затем в SomeClass:

   public static object SomeProperty { get { return new object(); } }

Где объект - это тип, который вы хотите создать. Я не уверен, что x: Static кэширует объект, который он однажды получил, но если нет, это сработает. Вы также можете попытаться подать в суд ObjectDataProvider Позволяет вызывать методы, конструкторы и свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...