У меня есть эта проблема, у меня есть приложение Silverlight, написанное с использованием MVVM. Мне нужно создать DataForm, который привязан к свойству ViewModel, и я хочу добавить ComboBox и заполнить его значениями из другой коллекции в той же ViewModel.Silverlight привязывает сборку к Combobox в DataForm с использованием MVVM
Код:
<dataFormToolkit:DataForm CurrentItem="{Binding NewUser, Mode=TwoWay}" AutoGenerateFields="False" Height="298">
<dataFormToolkit:DataForm.EditTemplate>
<DataTemplate>
<StackPanel>
<dataFormToolkit:DataField Label="Email">
<TextBox Text="{Binding Email, Mode=TwoWay}"/>
</dataFormToolkit:DataField>
<dataFormToolkit:DataField Label="Język">
<ComboBox ItemsSource="{Binding Path=Languages, Mode=TwoWay}"/>
</dataFormToolkit:DataField>
</StackPanel>
</DataTemplate>
</dataFormToolkit:DataForm.EditTemplate>
</dataFormToolkit:DataForm>
Все это обрабатывается NewAccountVM, который имеет следующие свойства:
private User newUser;
public User NewUser {
get
{
return newUser;
}
set
{
if (value != newUser)
{
newUser = value;
RaisePropertyChanged("NewUser");
}
}
}
private ObservableCollection<Language> languages;
public ObservableCollection<Language> Languages
{
get { return languages; }
set
{
if (languages != value)
{
languages = value;
RaisePropertyChanged("Languages");
}
}
}
Теперь это все работает, кроме добавления ItemsSource в ComboBox. Я нашел много примеров, показывающих, как заполнять CB в CodeBehind, но, как я уже сказал, я хочу сделать это в MVVM-стиле :) Я понимаю, что ComboBox унаследовал DataContext от DataForm, и этот ItemSource = "{Binding Path = Languages, Mode = TwoWay} "не будет работать, но я не знаю, как достичь своей цели.
Может кто-нибудь мне помочь?
Спасибо, это он :) Я понял это eriler, но у меня была проблема с моим ViewModel, потому что это было 2, мне пришлось реорганизовать создание моих ViewModels для этого со статическими ресурсами. Еще раз спасибо. – michajas
В этом примере, где вы устанавливаете ViewModel как DataContext для UserControl? Я предполагаю, что вы делаете это в конструкторе UserControl, но я хотел бы знать наверняка. –
@michajas Будьте осторожны при настройке виртуальных машин внутри ресурсов, если ваш VM ctor выдает исключение, он будет проглочен ошибкой синтаксического анализа XAML. Я бы очень хотел рассмотреть возможность установки виртуальной машины в событии Loaded и использования контейнера IoC для большей гибкости. – Agies