2010-10-14 4 views
0

J'ai un contrôle de l'utilisateur en wpf. Et je veux utiliser ce contrôle utilisateur deux fois dans la même vue. J'utilise l'approche MVVM. Quelqu'un peut-il me donner une bonne suggestion que quelle approche je devrais suivre.même contrôle de deux utilisateurs en xaml

Répondre

1

Euh, une raison pour laquelle vous ne l'utilisez pas deux fois? Si vous liez à la machine virtuelle (en tant que DataContext) avec les mêmes propriétés, cela ne fonctionnera pas autrement que de lier deux TextBlocks (ou un autre contrôle "normal") à la même propriété dans la machine virtuelle.

Ici j'utilise le même contrôle dans la même fenêtre, mais il pourrait tout aussi bien être utilisé dans le même UserControl, DataTemplate, etc. - tout ce que vous définissez comme une "vue".

XAML

<Window x:Class="MyNamespace.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:MyNamespace" 
     Title="My Window" Width="300" Height="300"> 
    <StackPanel> 
     <local:MyUserControl x:Name="control1" 
          SomeProperty="{Binding MyMVVMProperty}" /> 
     <local:MyUserControl x:Name="control2" 
          SomeProperty="{Binding MyMVVMProperty}" /> 

     <TextBlock x:Name="txt1" 
        Text="{Binding AnotherMVVMProperty}" /> 
     <TextBlock x:Name="txt2" 
        Text="{Binding AnotherMVVMProperty}" /> 
     <TextBlock x:Name="txt3" 
        Text="{Binding AThirdMVVMProperty}" /> 

    </StackPanel> 
</Window> 

code Derrière

class Window1 : Window 
{ 
    MyViewModel mViewModel = new MyViewModel(); 

    public Window1() 
    { 
     this.DataContext = mViewModel; 
    } 
} 
+0

Mais ..le problème est ... Lets pense que mon contrôle utilisateur est une grille. quand je sélectionne un article dans un contrôle d'utilisateur ... le même article sera sélectionné dans l'autre. – Relativity

+0

Exactement. C'est ce que MVVM est. Si vous utilisez le même contrôle avec les mêmes propriétés, la même chose devrait se produire dans les deux cas. Si vous utilisez le même contrôle mais changez une propriété différente, quelque chose de différent devrait se produire. J'ai mis à jour ma réponse ci-dessus - j'ai ajouté un troisième TextBlock. txt1 et txt2 se lient à la même propriété, donc si AnotherMVVMProperty change, les deux devraient refléter cela. Toutefois, txt3 (qui est également une instance d'un contrôle TextBlock) se lie à une valeur complètement différente et ne sera pas affectée par une modification du paramètre AnotherMVVMProperty. –

+0

Une autre façon de le regarder est la suivante: vous pouvez placer deux ListBox sur une vue et les lier à votre ViewModel. S'ils se lient tous les deux à la même propriété de collection dans votre machine virtuelle, ils seront identiques; s'ils se lient à des propriétés différentes, ils seront différents. Un UserControl n'est pas différent de tout autre contrôle s'il utilise des liaisons et non des valeurs codées en dur. –

Questions connexes