2010-10-14 2 views
0

У меня есть одно пользовательское управление в wpf. И я хочу использовать этот пользовательский контроль два раза в одном представлении.те же два пользовательских элемента управления в xaml

Я использую подход mvvm. Может ли кто-нибудь дать мне хорошее предложение о том, каким подходом я должен следовать.

ответ

1

Ум, почему бы вам не просто использовать его дважды? Если вы привязаетесь к виртуальной машине (как к DataContext) с теми же свойствами, она «просто работает», не иначе, как привязка двух текстовых блоков (или другого «обычного» элемента управления) к тому же свойству в виртуальной машине.

Здесь я использую тот же элемент управления в том же окне, но его можно так же легко использовать в том же UserControl, DataTemplate и т. Д. - все, что вы определяете как «представление».

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> 

Код За

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

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

Но ..следующие вопрос ... Давайте думать, мой пользовательский элемент управления представляет собой сетку. когда я выбираю элемент в одном пользовательском элементе управления ... тот же элемент будет выбран в другом. – Relativity

+0

Точно. Вот что такое MVVM. Если вы используете один и тот же элемент управления с теми же свойствами, то одно и то же должно произойти в обоих случаях. Если вы используете один и тот же элемент управления, но меняете другое свойство, должно произойти что-то другое. Я обновил свой ответ выше - я добавил третий TextBlock. txt1 и txt2 привязываются к одному и тому же свойству, поэтому, если переменная AnotherMVVMP изменяется, оба должны отражать это. Тем не менее, txt3 (который также является экземпляром элемента управления TextBlock) связывается с совершенно другим значением и на него не повлияет изменение свойства AnotherMVVMProty. –

+0

Еще один способ взглянуть на это - вы могли бы поместить два списка в View и привязать его к ViewModel. Если оба они привязаны к одному и тому же свойству коллекции в вашей виртуальной машине, они будут одинаковыми; если они свяжутся с разными свойствами, они будут разными. Пользователь UserControl ничем не отличается от любого другого элемента управления, если он использует привязки, а не жестко закодированные значения. –

Смежные вопросы