Comment définir une classe dans le DataContext avec XAML?
J'ai un WPF formes et une classe d'Utilisateurs (contenu des attributs Id, Login et Nom), dans ma classe de cette forme, j'ai eu pour obtenir un des Utilisateurs de l'objet pour mettre cette information dans le formulaire avec DataContext
et Binding
Je peux mettre ça Utilisateurs de l'objet à mon Window.DataContext (this.DataContext = usersObject;)
avec le code derrière, mais je pense que si je peux faire cela avec XAML, c'est peut-être mieux
J'ai mis un attribut de ma classe de l'objet UserForm (public Users usersObject {get; set;}
)
Mon formulaire UserForm : Window
<Window DataContext="{What need I put here?">
<Grid>
<TextBlock Text="Id:"/>
<TextBox Name="Id" Text="{Binding Path=Id}"/>
<TextBlock Text="Login:"/>
<TextBox Name="Login" Text="{Binding Path=Login}"/>
<TextBlock Text="Name:"/>
<TextBox Name="Name" Text="{Binding Path=Name}"/>
</Grid>
</Window>
Objet UserForm.xaml.cs
public class UserForm : Window
{
public Users userObject { get; set; }
public UserForm(Users user)
{
InitializeComponent();
this.userObject = user;
}
}
Ma classe les Utilisateurs
public class Users
{
public int Id { get; set; }
public string Login { get; set; }
public string Name { get; set; }
}
Comment puis-je faire pour régler userObject
dans le même Window.DataContext
pour la zone de texte peut mettre des valeurs?
Oui, il fonctionne, mais je ne veux pas de définir DataContext avec le code derrière
OriginalL'auteur Lai32290 | 2013-09-24
Vous devez vous connecter pour publier un commentaire.
Il y a quelque temps j'avais écrit un article sur les différentes possibilités de liaison de contrôle XAML de code derrière la propriété. Cela peut vous aider.
http://codingseason.blogspot.in/2013/05/data-binding-xaml-control-to-property.html
c'est du travail!! merci beaucoup!!
OriginalL'auteur RonakThakkar
Supprimer le DataContext de liaison puisque vous n'êtes pas explicitement de faire le pattern MVVM. Pas de point de faire la liaison.
Dans votre Fenêtre.xaml
Ajoutez ceci à votre Derrière le code Fenêtre.xaml.cs
Si vous le feriez en MVVM, vous auriez fait quelque chose comme cela
ViewModel.cs
Maintenant le ViewModel peut être personnaliser en fonction de ce que vous avez besoin, vous pouvez exposer le Modèle, de l'injecter à l'constructeur ou simplement régler la valeur de la propriété si elle est exposée. N'oubliez pas d'implémenter INotifyPropertyChanged si vous voulez propager les valeurs dans le ViewModel de retour à l'interface utilisateur.
Vue.xaml.cs
public de la classe de l'objet UserForm : Fenêtre
{
Vue.xaml
Vous avez deux choix, vous pouvez définir explicitement le DataContext, tout comme ce que j'ai fait derrière le code ou vous pouvez créer une propriété publique qui renvoie la UserViewModel. C'est juste la même
Modèle.cs
Maintenant, c'est un exemple très simpliste de le pattern MVVM. Une fois que vous connaissez les bases, vous pouvez ensuite intégrer quelques cadres qui implémente le modèle MVVM pour vous comme Caliburn Micro et Toolkit MVVM
Il n'est pas impossible, c'est juste que vous n'êtes pas en train de faire. Vous avez un ViewModel qui a l'Utilisateur que le Modèle. Permettez-moi de mettre à jour la réponse.
OriginalL'auteur 123 456 789 0
Créer un objet UserForm et de l'affectation des données de contexte est assez simple.
Il vaut mieux que vous retirez le code suivant:
Son mieux pour séparer le point de vue et le viewmodel. Jetez un oeil à MVVM et il aura plus de sens
TabItem
si vous réglez son.Content
égal, à partir de cette réponse, de toute façon,userFormView.DataContext
, pasuser
. Au lieu deUserForm
, j'ai utiliséUserControl
, et oùUsers
, dans votre exemple, la classe était d'avis que je voulais apporter. Je n'ai pas besoin de déclarer une instance deuserObject
, étant donné que dans mon cas c'était laTabItem
j'étais réglage de la.Content
de, ou de passer enUsers user
, depuis que j'ai annoncé tout ensemble dans le même funct. Merci!UserControl uc = new UserControl(); MyView viewObj = new MyView(); uc.DataContext = viewObj; this.MyTabItem.Content = uc.DataContext;
, dans mon cas, pour toute personne intéressée.OriginalL'auteur Aster Veigas
Peut-être vous pouvez définir une DependencyProperty à envelopper l'accès à la userObject,
puis le lier à la DataContext
OriginalL'auteur yihao
C'est l'un des moyen pour assigner DataContext directement à partir de xaml.
Exemple D'Application.xaml
Exemple UserForm.xaml
OriginalL'auteur Ashish Singh