WPF/XAML-Eigenschaft nicht auf "Objekt"

Ich bin mit einem BackgroundWorker in einem neuen WPF-Anwendung und ich benötige den Fortschritt melden/aktualisieren der Benutzeroberfläche, wie es funktioniert im hintergrund.

Ich habe das getan, für eine lange Zeit in WIndows Forms-Anwendungen. Ich habe nur umgeschrieben, es sind alle für WPF-und es ist mir ein bisschen Kopfschmerzen.

Es hält werfen die folgende Fehlermeldung zur Laufzeit:

System.Windows.Daten, Fehler: 40 : BindingExpression Pfad-Fehler: 'Absender'
Eigenschaft nicht gefunden '- Objekt' "Char" (HashCode=5046349)'.
BindingExpression:Path=Absender; DataItem='Char' (HashCode=5046349);
target-element 'TextBlock' (Name="); target-Eigenschaft ist "Text"
(Typ 'String') System.Windows.Daten, Fehler: 40 : BindingExpression Weg
Fehler: 'Subjekt' - Eigenschaft nicht auf "Objekt" "Char"
(HashCode=5046349)'. BindingExpression:Path=Thema; DataItem='Char'
(HashCode=5046349); target element 'TextBlock' (Name="); target
Eigenschaft 'Text' (Typ 'String') System.Windows.Daten, Fehler: 40 :
BindingExpression Pfad-Fehler: 'Absender' Eigenschaft nicht gefunden '- Objekt'
"Char" (HashCode=6619237)'. BindingExpression:Path=Absender;
DataItem='Char' (HashCode=6619237); target element 'TextBlock'
(Name="); target-Eigenschaft 'Text' (Typ 'String')
System.Windows.Daten, Fehler: 40 : BindingExpression Pfad Fehler:
'Subjekt' Eigenschaft nicht gefunden '- Objekt' "Char" (HashCode=6619237)'.
BindingExpression:Path=Thema; DataItem='Char' (HashCode=6619237);
target-element 'TextBlock' (Name="); target-Eigenschaft ist "Text"
(Typ 'String') System.Windows.Daten, Fehler: 40 : BindingExpression Weg
Fehler: 'Absender' Eigenschaft nicht gefunden '- Objekt' "Char"
(HashCode=7536755)'. BindingExpression:Path=Absender; DataItem='Char'
(HashCode=7536755); target element 'TextBlock' (Name="); target
Eigenschaft 'Text' (Typ 'String') System.Windows.Daten, Fehler: 40 :
BindingExpression Pfad-Fehler: 'Subjekt' - Eigenschaft nicht auf "Objekt"
"Char" (HashCode=7536755)'. BindingExpression:Path=Thema;
DataItem='Char' (HashCode=7536755); target element 'TextBlock'
(Name="); target-Eigenschaft 'Text' (Typ 'String')
System.Windows.Daten, Fehler: 40 : BindingExpression Pfad-Fehler: 'Absender'
Eigenschaft nicht gefunden '- Objekt' "Char" (HashCode=7536755)'.
BindingExpression:Path=Absender; DataItem='Char' (HashCode=7536755);
target-element 'TextBlock' (Name="); target-Eigenschaft ist "Text"
(Typ 'String') System.Windows.Daten, Fehler: 40 : BindingExpression Weg
Fehler: 'Subjekt' - Eigenschaft nicht auf "Objekt" "Char"
(HashCode=7536755)'. BindingExpression:Path=Thema; DataItem='Char'
(HashCode=7536755); target element 'TextBlock' (Name="); target
Eigenschaft 'Text' (Typ 'String') System.Windows.Daten, Fehler: 40 :
BindingExpression Pfad-Fehler: 'Absender' Eigenschaft nicht gefunden '- Objekt'
"Char" (HashCode=6357089)'. BindingExpression:Path=Absender;
DataItem='Char' (HashCode=6357089); target element 'TextBlock'
(Name="); target-Eigenschaft 'Text' (Typ 'String')
System.Windows.Daten, Fehler: 40 : BindingExpression Pfad Fehler:
'Subjekt' Eigenschaft nicht gefunden '- Objekt' "Char" (HashCode=6357089)'.
BindingExpression:Path=Thema; DataItem='Char' (HashCode=6357089);
target-element 'TextBlock' (Name="); target-Eigenschaft ist "Text"
(Typ 'String') System.Windows.Daten, Fehler: 40 : BindingExpression Weg
Fehler: 'Absender' Eigenschaft nicht gefunden '- Objekt' "Char"
(HashCode=6750311)'. BindingExpression:Path=Absender; DataItem='Char'
(HashCode=6750311); target element 'TextBlock' (Name="); target
Eigenschaft 'Text' (Typ 'String') System.Windows.Daten, Fehler: 40 :
BindingExpression Pfad-Fehler: 'Subjekt' - Eigenschaft nicht auf "Objekt"
"Char" (HashCode=6750311)'. BindingExpression:Path=Thema;
DataItem='Char' (HashCode=6750311); target element 'TextBlock'
(Name="); target-Eigenschaft 'Text' (Typ 'String')
System.Windows.Daten, Fehler: 40 : BindingExpression Pfad-Fehler: 'Absender'
Eigenschaft nicht gefunden '- Objekt' "Char" (HashCode=6619237)'.
BindingExpression:Path=Absender; DataItem='Char' (HashCode=6619237);
target-element 'TextBlock' (Name="); target-Eigenschaft ist "Text"
(Typ 'String') System.Windows.Daten, Fehler: 40 : BindingExpression Weg
Fehler: 'Subjekt' - Eigenschaft nicht auf "Objekt" "Char"
(HashCode=6619237)'. BindingExpression:Path=Thema; DataItem='Char'
(HashCode=6619237); target element 'TextBlock' (Name="); target
Eigenschaft 'Text' (Typ 'String')

Ich habe keine Ahnung, was das eigentlich bedeutet. Ein paar Google-suchen nicht zu offenbaren, etwas, das dazu beigetragen hat.

Ich werde auch darauf hinweisen, dass der code tatsächlich abgerufen werden alle mails nur in Ordnung, wenn ich nicht verwenden, die BGWorker in WPF. Aber es hält nur arbeiten und Stoppt dann verbindlich, wenn ich den hintergrund-Arbeiter. Ich habe keine Ahnung, warum. Die exakt gleiche code arbeitet in WinForms für BGWorker.

Was bedeutet dieser Fehler wirklich bedeuten und was kann ich tun, um es loszuwerden?

Code-behind:

public partial class MainWindow : Window
    {
        public BackgroundWorker worker = new BackgroundWorker();
        public ObservableCollection<Message> messages = new ObservableCollection<Message>();
        public MailMessage msg;
        int count = 0;

        public class Message
        {
            public string Sender { get; set; }
            public string Subject { get; set; }
            public string Content { get; set; }
            public DateTime DateReceived { get; set; }
            public DateTime DateRead { get; set; }
            public MailMessage Mail { get; set; }
        }

        public MainWindow()
        {
            InitializeComponent();

            worker.WorkerSupportsCancellation = true;
            worker.WorkerReportsProgress = true;

            worker.ProgressChanged += Worker_ProgressChanged;
            worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
            worker.DoWork += Worker_DoWork;
        }

        private void RetrieveMessages()
        {
            //Working code.
            using (var imap = new AE.Net.Mail.ImapClient())
            {
                for(int i = 0; i < count; i++)
                {
                    MailMessage msg = imap.GetMessage(i, true, false);
                    worker.ReportProgress(i);
                }
            }
        }

        private void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            if(count != 0)
                RetrieveMessages();
            else
            {
                using(var imap = new AE.Net.Mail.ImapClient())
                {
                    count = imap.GetMessageCount("Inbox");
                }
            }
        }

        private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            status.Text = "Status: Idle.";

                list.ItemsSource = messages;
        }

        private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            Console.WriteLine(msg.Sender.Address + " " + msg.Subject);
            MessageBox.Show(msg.Subject);
            if(msg != null)
            {
                messages.Add(new Message()
                {
                    Sender = "hi",
                    Subject = msg.Subject,
                    Content = msg.Body,
                    Mail = msg
                });

                msg = null;
            }
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            //DEBUG ONLY
            worker.RunWorkerAsync();
            status.Text = "Status: Synchronizing.";
        }
    }

XAML:

    <ScrollViewer ScrollViewer.CanContentScroll="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
        <ListView x:Name="list" ItemsSource="{Binding Source=Message}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="{x:Null}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical" HorizontalAlignment="Stretch">
                        <TextBlock x:Name="senderLabel" Text="{Binding Sender}" HorizontalAlignment="Stretch" TextTrimming="WordEllipsis" TextWrapping="Wrap" FontWeight="SemiBold" />
                        <TextBlock x:Name="subjectLabel" Text="{Binding Subject}" HorizontalAlignment="Stretch" TextTrimming="WordEllipsis" TextWrapping="Wrap" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </ScrollViewer>
  • ändern Sie Ihre ListView-Bindung an die Sammlung: "ItemsSource="{Binding Nachrichten}"
  • Ich habe es geändert von Message-Nachrichten, die in XAML, aber ich bin immer noch der gleiche Fehler angezeigt.
  • überprüft es jetzt deine Einstellung nicht etwas in datacontext so eine Bindung nicht in der listview entfernen ItemsSource="{Binding Source=Message}", als es sollte arbeiten, weil Sie es im code-behind. Und sollten Sie Lesen, einige Artikel über Bindung und mvvm 😉
InformationsquelleAutor jay_t55 | 2014-07-03
Schreibe einen Kommentar