erstellen Sie eine wiederverwendbare user-control in WPF

In der (ziemlich großes) LOB-Anwendung bauen wir mit WPF UI, wir haben eine Menge von viewmodels, die enthalten die gleiche Art von Daten sub-Objekt. Zum Beispiel, es gibt eine Menge von Adressen

public class AddressViewModel : INotifyPropertyChanged
{

   public string City {...}
   public string ZipCode {...}
   public string Address {...}
   public string Number {...}

  //INPC logic omitted 
}

verstreut business-Objekte:

public class CustomerViewModel : INotifyPropertyChanged
{
     public string Name {...}
     public AddressViewModel BillingAddress {...}
     public AddressViewModel DeliveryAddress {...}
     /*
     ...
     */
}

ist es möglich, erstellen Sie eine wiederverwendbare benutzerdefinierte User-Control, welches von uns binden können jede beliebige Adresse sub-Objekt?

In einer Sicht (eventuell einer anderen custom user control) zum Bearbeiten von Kundendaten wir möchten ein benutzerdefiniertes Steuerelement, wie diese

<UserControl x:Class="OurApp.View.AddressEditor"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>

        <TextBox x:Name="ZipCode" Text="{Binding Path=ZipCode, UpdateSourceTrigger = PropertyChanged}" Validation.ErrorTemplate="{x:Null}" HorizontalAlignment="Left" Height="23" Margin="10,19,0,0" TextWrapping="Wrap"  VerticalAlignment="Top" Width="120" />

         <!-- other fields for the rest of AddressViewModel properties-->

    </Grid>

</UserControl>

dass wir Sie einfach verwenden, wie dies in einer Ansicht an ein CustomerViewModel-Instanz

 <TextBox x:Name="Name" Text="{Binding Path=Name, UpdateSourceTrigger = PropertyChanged}" Validation.ErrorTemplate="{x:Null}" />

<AddressEditor SomeProperty="{something that points to BillingAddress}" />
<AddressEditor SomeProperty="{something that points to DeliveryAddress}" />

Was ist der richtige Weg, dies zu tun? Wir haben versucht, die Bindung an BillingAddress aber wir konnten nicht finden, einen funktionierenden Weg...

Vielen Dank im Voraus für jeden Beitrag,

InformationsquelleAutor Max | 2013-01-31
Schreibe einen Kommentar