2012-04-27 2 views
2

Мне нужно создать в моем XAML-файле статический ресурс.Статический конструктор ресурсов с параметрами

<Window.Resources> 
    <vm:ViewModel x:Key="viewModel" /> 
</Window.Resources> 

мне нужен этот статический ресурс, чтобы получить детали для моего комбобоксе

ItemsSource="{Binding Source={StaticResource viewModel}, Path=GetItems, Mode=TwoWay}" 

Но как я могу дать ViewModel (конструктор) экземпляр моего кода за класс?

+0

Почему ваш ViewModel нуждается в экземпляре вашего кода за классом? – Mark

ответ

7

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

0

Ну, вы можете сделать это из кода, я имею в виду все из кода, или вы можете попробовать (в зависимости от того, как ваше приложение architcted), с помощью ObjectDataProvider.

Например:

<ObjectDataProvider ObjectType="{x:Type ViewModel}" x:Key="viewModel"> 
     <ObjectDataProvider.ConstructorParameters> 
       <StaticResource ResourceKey="dataProvider"/> 
     </ObjectDataProvider.ConstructorParameters> 
</ObjectDataProvider > 

В этом случае, естественно, параметр вы передаете CTOR в povoder, должны быть ресурс тоже.

+2

@downvoter: помочь объяснить? – Tigran

2

Насколько я понимаю, вы хотите привязать свой режим просмотра и viewmodel в соответствии с шаблоном MVVM.

Вы не должны ссылаться на свою модель просмотра прямо на ваш взгляд, иначе у вас будет сильная связь между ними. Согласно образцу MVVM, вы должны пара их по DataContext

в код (например, в файле App.xaml.cs) он выглядит, что

yourWindow.DataContext = yourViewModel 

Тогда в вашем ViewModel класса вы будет иметь свойство с именем GetItems

Наконец в окне вы связать ваш ListBox к GetItems

ItemsSource="{Binding GetItems, Mode=TwoWay}" 
Смежные вопросы