Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Bindingfehler aber es bindet
Sindelfinger
myCSharp.de - Member



Dabei seit:
Beiträge: 27
Herkunft: Deutschland

Themenstarter:

Bindingfehler aber es bindet

beantworten | zitieren | melden

Hallöle und einen schönen sonnigen Freitag liebe Gemeinde.

Ich befürchte daß mir mal wieder das Verständnis fehlt. Ich habe eine WPF - Anwendung erstellt, dort im Hauptfenster eine ListView erstellt mit einem Item - Template auf mein Haupt - ViewModel. Wenn ich das Projekt nun starte, behauptet mein VS2019:

Datenkontext: Ziel: Zieltyp Beschreibung
String "ListView.ItemSource, Name="lstNewBase" IENumerable Die Eigenschaft "Bases" wurde im Objekt vom Typ "String" nicht gefunden.

Interessanterweise zeigt das Fenster trotzdem alles an, was ich angezeigt bekommen möchte.


            <ListView x:Name="lstNewTool" ItemsSource="{Binding Tools}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionMode="Single" Margin="5" Width="400">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <views:ToolChangeView DataContext="{Binding}"/>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

Und hier das dazugehörige ViewModel


   public class ToolViewModel :ViewModelBase
    {
        private int _toolnumber;
        private string _toolname;
        private RobFrame _tooldata;
        private bool _isused;

        public bool IsUsed
        {
            get
            {
                return _isused;
            }
            set
            {
                _isused = value;
                RaisePropertyChanged(nameof(IsUsed));
            }
        }
        public int ToolNumber
        {
            get
            {
                return _toolnumber;
            }
            set
            {
                _toolnumber = value;
                RaisePropertyChanged(nameof(ToolNumber));
            }
        }        
        public string ToolName
        {
            get
            {
                return _toolname;
            }
            set
            {
                _toolname = value;
                RaisePropertyChanged(nameof(ToolName));
            }
        }      
        public RobFrame ToolData
        {
            get
            {
                return _tooldata;
            }
            set
            {
                _tooldata = value;
                RaisePropertyChanged(nameof(ToolData));
            }
        }
        public ToolViewModel()
        {
            ToolNumber = 0;
            IsUsed = false;
            ToolName = "";
            ToolData = new RobFrame();
        }

    }

Da es gerade in Richtung Wochenende geht, wünsche ich Euch allen ein schönes solches. Herzliche Grüße aus dem sonnigen Süden
Attachments
2 stupid 4 chess? No way.
2 stupid 4 C#? It seems so X(
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 386
Herkunft: Kassel

beantworten | zitieren | melden

Welchen Typ hat denn die Property Tools? Die zeigst du nirgendwo, dass ist doch die, die abgemartert ist, diese müsste etwas sein,dass IEnumerable implementiert.
private Nachricht | Beiträge des Benutzers
Caveman
myCSharp.de - Member

Avatar #avatar-3854.jpg


Dabei seit:
Beiträge: 140

beantworten | zitieren | melden

Ich vermute mal, dass die Bindungen dadurch zustande kommen, weil Du den DataContext vom DataTemplate direkt auf das ToolViewModel bindest. Wie Papst schon angemerkt hat, fehlt das Tools-Property im ViewModel.

In Deinem ViewModel musst Du ein Property Tools vom Typ List<ToolViewModel> definieren. Du brauchst in dem Fall keine ObservableCollection<ToolViewModel>, da sich die Anzahl der Tools nicht ändert.
Das DataTemplate ToolChangeView änderst Du wie folgt.

        <DataTemplate DataType="{x:Type local:ToolViewModel}">
            <views:ToolChangeView />
        </DataTemplate>

Du solltest auch überlegen, ob Du das ToolViewModel nicht verallgemeinern kannst. Tooldate und Basedaten haben beim KUKA die gleiche Struktur.

Hier nochmals als Code:

        <ListView x:Name="lstNewTool" 
                  ItemsSource="{Binding Tools}" 
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ScrollViewer.VerticalScrollBarVisibility="Auto" 
                  SelectionMode="Single" 
                  Margin="5" 
                  Width="400">
            <ListView.ItemTemplate>
                <DataTemplate DataType="{x:Type local:ToolViewModel}">
                    <StackPanel>
                        <TextBlock Text="{Binding ToolName}" />
                        <TextBlock Text="{Binding ToolNumber}" />
                        <TextBlock Text="{Binding ToolData.X}" />
                        <TextBlock Text="{Binding ToolData.Y}" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>


    public class MainWindowViewModel : ViewModelBase
    {
        public ObservableCollection<ToolViewModel> Tools { get; set; }

        public MainWindowViewModel()
        {
            Tools = new ObservableCollection<ToolViewModel>
            {
                new ToolViewModel()
            };
        }
    }
private Nachricht | Beiträge des Benutzers
Sindelfinger
myCSharp.de - Member



Dabei seit:
Beiträge: 27
Herkunft: Deutschland

Themenstarter:

beantworten | zitieren | melden

Hallo Caveman

Es hat eine Weile gedauert, bis ich wieder darüber gestolpert bin. Dein Tip hat 100%ig funktioniert. Herzlichen Dank dafür.
2 stupid 4 chess? No way.
2 stupid 4 C#? It seems so X(
private Nachricht | Beiträge des Benutzers