Laden...

ListView eine Progressbar anhängen - Exception One-Way / Two-Way

Erstellt von Diablo vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.709 Views
D
Diablo Themenstarter:in
47 Beiträge seit 2011
vor 10 Jahren
ListView eine Progressbar anhängen - Exception One-Way / Two-Way

Huhu,

bin immer noch neu im WPF-Gebiet und habe ein neues Problem. Und zwar möchte ich einer ListView eine ProgressBar anhängen.

Mein XAML-Code sieht wie folgt aus:

<GridViewColumn Header="Progress">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <ProgressBar Name="progressBarVideo" Height="20" Width="100" Minimum="0" Maximum="100" Value="{Binding Path=Progress}" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>

Der C#-Code:

 listViewFiles.Items.Add(
                    new {
                        Images = videoList[i].videoThumbnailUrl,
                        Title = videoList[i].videoTitle, 
                        Length = videoList[i].videoLength,
                        Progress = 91, 
                        Status = "", 
                    });

Nun kommt folgende Exception:

TwoWay- oder OneWayToSource-Bindungen funktionieren nicht mit der schreibgeschützten Eigenschaft "Progress" vom Typ "<>f__AnonymousType0`5[System.String,System.String,System.String,System.Int32,System.String]".

So, setze ich nun im XAML-Code Value auf Value="50" wird das Programm gestartet und die ProgressBar steht auf 50%.

Was mache ich nun verkehrt? Vorallem aber wie greife ich jetzt auch auf die ProgressBar zu um un einen Status korrekt anzeigen zu können?

T
314 Beiträge seit 2013
vor 10 Jahren

Hi,

na die Fehlermeldung ist doch aussagekräftig. Da die Properties eines anonymen Typen readonly sind, kannst Du kein TwoWay Binding benutzen. (Dies ist bei der Value Property der Progressbar Default.)

Sprich entweder Du gibst explizit an, dass es OneWay ist

Value="{Binding Path=Progress, Mode=OneWay}"

oder du benutzt eben keinen anonymen Typen.

Gruß
t0ms3n

D
Diablo Themenstarter:in
47 Beiträge seit 2011
vor 10 Jahren

Huhu, Danke für deine Antwort. Habe ich mit der "OneWay" Methode denn irgendwelche Nachteile?

Und wie kann man keinen "anonymen Typen" verwenden?

Ich wusste nichtmal, dass man mit

listViewFiles.Items.Add(
                    new {
                        Images = videoList[i].videoThumbnailUrl,
                        Title = videoList[i].videoTitle,
                        Length = videoList[i].videoLength,
                        Progress = 91,
                        Status = "",
                    });

einen anonymen Typen erzeugt =)
Ich konnte bis jetzt nur herausfinden, dass man so eine Art "SubItem" wie bei WinForms erzeugt. Zumindest werden die Items alle wie bei einer WinForms ListView angezeigt.

D
615 Beiträge seit 2009
vor 10 Jahren

Hallo Diablo

Mit

new {
                        Images = videoList[i].videoThumbnailUrl,
                        Title = videoList[i].videoTitle,
                        Length = videoList[i].videoLength,
                        Progress = 91,
                        Status = "",
                    }

Erstellst du ein anonymer Typ weil kein expliziter Typ angegeben.
Dein Typ wäre also etwa string,string,int,int,string.

Habe ich mit der "OneWay" Methode denn irgendwelche Nachteile?

OneWay bedeutet "readonly".

Wenn du kein anonymer Typ willst kannst eine Klasse erstellen und diese dann verwenden :

new [B]MyClass [/B]{
                        Images = videoList[i].videoThumbnailUrl,
                        Title = videoList[i].videoTitle,
                        Length = videoList[i].videoLength,
                        Progress = 91,
                        Status = "",
                    }

Dies gehört aber zu den Grundlagen und wird hier eigentlich voraussgesetzt 😉

Beste Grüsse

Diräkt