myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » Usercontrols dynamisch hinzufügen / entfernen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Usercontrols dynamisch hinzufügen / entfernen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Mallett
myCSharp.de-Mitglied

Dabei seit: 29.05.2012
Beiträge: 167


Mallett ist offline

Usercontrols dynamisch hinzufügen / entfernen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

ich habe ewig kein WPF mehr benutzt und muss jetzt eine Visualisierung basteln, allerdings bin ich ziemlich eingerostet, was WPF angeht.

Ich habe folgendes Problem:

Der Bediener kann zur Laufzeit über ein Hauptmenü (verknüpft im ViewModel über Commands) GruppenControls hinzufügen und entfernen. So weit so gut:

C#-Code:
public class MainViewModel
{
   //...
   private async Task AddNewGroupCommandAction()
   {
       // Vorab wird über Netzwerk an eine Gegenstelle await ... gemacht

       // Dann lege ich mein neuen Gruppen-Usercontrol an und speichere es in einer List
       GroupViewModel vm = new GroupViewModel();
       GroupUserControl ctrl = new GroupUserControl(vm);

       // intern wird NotifyPropertyChanged etc. ausgeführt
       AddGroupControlToListProperty(ctrl);
   }

   //...
}

Da es maximal 8 Gruppen sein können, habe ich im MainView ein 4x2 Grid als Hauptelement. Ich würde jetzt gerne die GroupUserControls per Binding and meine GroupControlList binden, so dass die einzelnen UserControls in jeweils einer Zelle im Grid angezeigt werden, falls vorhanden. Also Element 0 der List in Zelle 1,1 usw.

XML-Code:
<Page x:Class="Vendor.Pages.GroupView"
      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"
      xmlns:local="clr-namespace:Vendor.Pages"
      mc:Ignorable="d"
      d:DesignHeight="450" d:DesignWidth="800"
      d:DataContext="{d:DesignInstance Type=local:MainViewModel, IsDesignTimeCreatable=True}"
      Title="GroupView"
>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="1*" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>
    </Grid>
</Page>

Erste Idee wäre jetzt, jeweils ein ContentControl für jede Zelle einzufügen und dann dessen Content an jeweils einen Eintrag in der List zu binden, aber genau da weiß ich nicht, wie ich an ein bestimmtes Element der Liste binden könnte.

Ist der Ansatz an sich falsch, gibt es einen besseren Weg?

Über einen Schubser in die richtige Richtung würde ich mich freuen.
Danke schonmal.
12.11.2019 08:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.279
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Im MainViewModel solltest du keine Controls erstellen, sondern eigene ViewModels für die Menüpunkte. Die packst du dann in eine ObservableCollection und bindest diese Liste an ein ItemsControl. Siehe die Beispiele in  [Artikel] MVVM und DataBinding, Abschnitt 2.4 ViewModel-Auflistungen bzw. Strg-F "ItemsControl".
12.11.2019 13:33 Beiträge des Benutzers | zu Buddylist hinzufügen
Mallett
myCSharp.de-Mitglied

Dabei seit: 29.05.2012
Beiträge: 167

Themenstarter Thema begonnen von Mallett

Mallett ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke, werd ich mir mal anschauen. Ich habs zwar in der Zwischenzeit bereits mit einem Itemscontrol umgesetzt, das bindet aber an eine Collection mit Usercontrols zur Zeit. Wäre sicher schöner, wenn ich das mit der verlinkten Lösung hinbekäme.
14.11.2019 08:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Monate.
Der letzte Beitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 21.01.2020 18:57