none
Fehler: Stack Trace im Desgner RRS feed

  • Frage

  • Hallo,

    In einem WPF-Fenster biete ich dem Benutzer  u.a. mit in einem DataGrid die Auswahl von bestimmten Dateien an. Die ItemSource des DataGrids ist an eine ObservableCollection<System.IO.FileInfo> Liste gebunden. Der Code funktioniert im Debug- und Buildmodus wie der soll.
    Ich wollte jetzt, nach ca. 6 Wochen, im WPF-Fenster eine kleine Änderung vornehmen und bekomme nun plötzlich folgende Fehlermeldung:

    und der Entwurf lasst sich im  Designer nicht mehr anzeigen.

    Nach langer Suche habe ich die Ursache der gefunden:  System.IO.FileInfo
    Wenn ich System.IO.FileInfo mit 

            public class MyFileInfo
            {
                public FileInfo FileInfo { get; set; }
            }
    
    

    in der ObservableCollection ersetze ist der Fehler behoben.

    Wieso taucht der Fehler jetzt plötzlich auf? Bis vor ca. 6 Wochen war noch alles OK.
    Ich arbeite mit Visual Studio Community 2019 Version 16.5.3. Ist es ein Bug in dieser Version oder in den vorhergehenden? Liegt es daran, das FileInfo nicht vererbbar ist? Ich verwende es doch nur in einer Sammlung.

    Vielleicht kann mir das jemand mit einfachen Worte erklären?

    Schöne Ostern wünscht
    Klaus.


    Samstag, 11. April 2020 07:27

Antworten

  • Hi Klaus,
    dein Problem wird an einer anderen Stelle liegen. Ein kleiner Test mit VS2019 zeigt, dass des problemlos funktioniert.

    XAML:

    <Window x:Class="WpfApp1.Window26"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp26"
            mc:Ignorable="d"
            Title="Window26" Height="450" Width="800">
      <Window.DataContext>
        <local:ViewModel/>
      </Window.DataContext>
      <Grid>
        <DataGrid ItemsSource="{Binding View}"/>
      </Grid>
    </Window>

    ViewModel dazu:

    using System.Collections.ObjectModel;
    using System.ComponentModel;
    using System.Windows;
    using System.Windows.Data;
    
    namespace WpfApp26
    {
      public class ViewModel
      {
        public ViewModel()
        {
          foreach (var fname in System.IO.Directory.GetFiles(@"c:\temp"))
            col.Add(new System.IO.FileInfo(fname));
          cvs.Source = col;
        }
        private CollectionViewSource cvs = new CollectionViewSource();
        private ObservableCollection<System.IO.FileInfo> col = new ObservableCollection<System.IO.FileInfo>();
        public ICollectionView View { get => cvs.View; }
      }
    }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks


    Samstag, 11. April 2020 09:12

Alle Antworten

  • Hi Klaus,
    dein Problem wird an einer anderen Stelle liegen. Ein kleiner Test mit VS2019 zeigt, dass des problemlos funktioniert.

    XAML:

    <Window x:Class="WpfApp1.Window26"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp26"
            mc:Ignorable="d"
            Title="Window26" Height="450" Width="800">
      <Window.DataContext>
        <local:ViewModel/>
      </Window.DataContext>
      <Grid>
        <DataGrid ItemsSource="{Binding View}"/>
      </Grid>
    </Window>

    ViewModel dazu:

    using System.Collections.ObjectModel;
    using System.ComponentModel;
    using System.Windows;
    using System.Windows.Data;
    
    namespace WpfApp26
    {
      public class ViewModel
      {
        public ViewModel()
        {
          foreach (var fname in System.IO.Directory.GetFiles(@"c:\temp"))
            col.Add(new System.IO.FileInfo(fname));
          cvs.Source = col;
        }
        private CollectionViewSource cvs = new CollectionViewSource();
        private ObservableCollection<System.IO.FileInfo> col = new ObservableCollection<System.IO.FileInfo>();
        public ICollectionView View { get => cvs.View; }
      }
    }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks


    Samstag, 11. April 2020 09:12
  • Hallo Peter,

    vielen Dank für Deine Hilfe. Du hast Recht. Ich habe mit Deinem Code etwas herumexperimentiert und konnte die Fehlermeldung auch nicht nachvollziehen.

    In meinem Projekt habe ich jetzt die  ObservableCollection<System.IO.FileInfo> Liste nach Deinem Beispiel mit ICollectionView an das DataGrid gebunden. Damit funktioniert es wieder und ich benötige den Umweg über die MyFileInfo-Class nicht mehr.

    Vielleicht werde ich, wenn ich mehr Zeit habe, mich nochmal damit beschäftigen und versuchen die Ursache zu finden.

    Grüße

    Klaus

    Samstag, 11. April 2020 12:49