J'ai ce problème, j'ai l'application Silverlight écrite en utilisant MVVM. J'ai besoin de créer DataForm qui est lié à la propriété sur ViewModel et je veux ajouter ComboBox et le remplir avec des valeurs d'autres collections dans le même ViewModel.Silverlight lier la collection à Combobox dans DataForm en utilisant MVVM
code:
<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>
Tout cela est géré par NewAccountVM qui a ces propriétés:
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");
}
}
}
Maintenant, tout cela fonctionne en plus d'ajouter à ItemsSource ComboBox. J'ai trouvé de nombreux exemples montrant comment remplir CB dans CodeBehind, mais comme je l'ai dit, je veux le faire dans MVVM-Style :) Je comprends que ComboBox a hérité DataContext de DataForm, et ItemsSource = "{Binding Path = Languages, Mode = TwoWay} "ne fonctionnera pas, mais je n'ai aucune idée de comment atteindre mon objectif.
Quelqu'un peut-il m'aider?
Merci, c'est-il :) Je l'ai pensé à elle eriler, mais j'avais problème avec mon ViewModel parce qu'il avait 2 constructeurs, j'ai dû réorganiser la création de mes ViewModels à celle-ci avec des ressources statiques. Merci encore. – michajas
Dans cet exemple, où définissez-vous le ViewModel en tant que DataContext pour UserControl? Je suppose que vous le faites dans le constructeur de l'UserControl, mais je voudrais savoir à coup sûr. –
@michajas Faites attention à la configuration de la VM à l'intérieur des ressources, si votre VM ctor lève une exception, elle sera avalée par une erreur d'analyse XAML. Je suggère fortement de regarder la VM dans l'événement Loaded et d'utiliser un conteneur IoC, pour plus de flexibilité. – Agies