Frage

Ich habe gerade angefangen, Caliburn und WPF zu verwenden, und bin dabei steckengeblieben, ein UserControl mit einem Parameter in mein Fenster einzufügen.

Habe eine Klasse benannt Item mit einer Eigenschaft namens SellPrice was a zurückgibt Money Objekt.Ich möchte das übertragen Money Objekt zu einem UserControl, um die Daten in diesem Objekt zu formatieren.Wie übertrage ich das Objekt?Muss ich den Konstruktor verwenden?

MainView.xaml

<DataGridTemplateColumn Header="Sell Price">
     <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
            <local:MoneyControlView/>
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn>

Der obige Code funktioniert gut, wenn es keinen Parameter gäbe, aber wie übergebe ich den Money Objekt?

Ich habe versucht, es über DependencyProperty wie folgt zu tun:

public partial class MoneyControlView : UserControl
{
    public static readonly DependencyProperty MoneyProperty = DependencyProperty.Register
    (
            "Money",
            typeof(Money),
            typeof(MoneyControlView),
            new PropertyMetadata(new Money())
    );

    public Money Money
    {
        get { return (Money)GetValue(MoneyProperty); }
        set { SetValue(MoneyProperty, value); }
    }

    public MoneyControlView()
    {
        InitializeComponent();
        DataContext = new MoneyControlViewModel(Money);
    }
}

Bei der Verwendung gilt jedoch Folgendes:

<local:MoneyControlView Money="{Binding BuyPrice}"/>

es funktioniert nicht.die Immobilie bleibt leer.

War es hilfreich?

Lösung

Aus Ihrer Frage geht nicht klar hervor, wie ein Item bezieht sich auf a MoneyControlViewModel.Es gibt jedoch mehrere mögliche Änderungen am aufgeführten Code:

1) Veränderung Collection<Item> Zu ObservableCollection<Item>

2) Angenommen, das Item Klasse hat eine Money Eigenschaft, die a zurückgibt MoneyControlViewModel...Ändern Sie im XAML die DataGridTemplateColumn:

<DataGridTemplateColumn Header="Sell Price">
     <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
            <ContentControl x:Name="SellPrice" cal:View.Model="{Binding Money}"/>
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn>

Dieser Teil Ihrer Frage ist nicht klar:

Wie implementieren ich das Money UserControl für jedes Element in meiner Liste?Wäre kein Problem, wenn ich den aktuellen Index des Datagrids bekommen würde, um das Geldobjekt aus dem Artikel abzurufen ...

Es sieht so aus, als ob Sie ein ItemsControl wünschen und ein DataTemplate mit einem MoneyControl verwenden möchten.Diese Frage könnte helfen: ItemsControl ItemTemplate-Bindung

Andere Tipps

Auf der Klasse, die Ihr BuyPrice Die darin enthaltene Eigenschaft erfordert eine Implementierung INotifyPropertyChanged und auf der Setter des BuyPrice Sie müssen die implementierte Methode erhöhen OnRaisedPropertyChanged("BuyPrice") (.Net 4.0).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top