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,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Yeah, das sollte sehr einfach sein, erstellen Sie entweder eine lookless Kontrolle mit
DataTemplate
, oder erstellen Sie einfach ein standard-Benutzersteuerelement. Trick anwenden, um seineDataContext
zu einem vollständigen Adresse-ObjektErmöglichen würde, Ihre neue "AddressControl" zu haben-markup so etwas
können Sie die datacontext für Ihre adresseditor, um zB. die BillingAddress sollte es funktionieren, so lange die billingaddress hat die Eigenschaften, dass Sie in Ihrem usercontrol
anstatt der datacontext ist es auch möglich, erstellen Sie eine Abhängigkeitseigenschaft, die für Ihr usercontrol, wo Sie binden Ihr BillingAddress zu.