Benutzer mit den meisten Antworten
Data Binding an ein Listen-Element

Frage
-
Hallo Leute,
da mir hier immer sehr schnell geholfen wurde, versuche ich mal wieder mein Glück.
Ich möchte Controls an Listen-Elemente binden.
Jedoch wird der Index nicht akzeptiert.
Weder:
bind.Path = new PropertyPath(liste[0].PersonName);
Noch:
this.DataContext = liste[0];
Ziel ist es, dass ich mit +/- Buttons den Index inkrementieren/ dekrementieren möchte, und die Controls die entsprechenden Werte anzeigen.
Ich danke im voraus für eure Lösungsvorschläge.- Bearbeitet Robert Breitenhofer Dienstag, 26. Oktober 2010 12:06 Formatierung
Samstag, 2. Oktober 2010 15:32
Antworten
-
Hallo an alle,
danke noch einmal für eure Hilfe.
Hier meine Lösung des Problems.
Ich habe mir eine Converter geschrieben, welcher den aktuellen Index entgegen nimmt
und mir das dafür entsprechende Listenelement zurück liefert.
Beispiel:
converter:
public class IntConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return App.historyNodeList2[System.Convert.ToInt32(value)];
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.ToString();
}
}
Binding an Listenelement in Abhängigkeit von einem globalen Index:- App._historyIndex ist von INotifyPropertyChanged abgeleitet
IntConverter IC = new IntConverter();
Binding bind = new Binding();
bind.Converter = IC;
bind.Source = App._historyIndex;
bind.Path = new PropertyPath("History_Index");
ColumnSeries bs = new ColumnSeries();
bs.SetBinding(ColumnSeries.ItemsSourceProperty, bind);
- Als Antwort markiert Robert Breitenhofer Donnerstag, 28. Oktober 2010 11:16
Donnerstag, 28. Oktober 2010 10:44
Alle Antworten
-
Hier mal eine Demo:
<UserControl x:Class="SilverlightApplication2.Usercontrol1" 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" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" xmlns:my="clr-namespace:SilverlightApplication2"> <UserControl.Resources> <my:ViewModel x:Key="vm"/> <Style TargetType="Button"> <Setter Property="Margin" Value="5" /> <Setter Property="Width" Value="100" /> </Style> </UserControl.Resources> <StackPanel DataContext="{Binding Source={StaticResource vm}}"> <Button Content="vorwärts" Click="Vorwaerts_Click" /> <Button Content="rückwärts" Click="Rueckwaerts_Click" /> <StackPanel DataContext="{Binding DetailView}"> <TextBox Text="{Binding ID}"/> <TextBox Text="{Binding Inhalt}"/> </StackPanel> </StackPanel> </UserControl>
Dazu die Klassen:
Imports System.ComponentModel Public Class ViewModel Implements INotifyPropertyChanged Private m As New Model Private i As Integer = -1 Public ReadOnly Property DetailView Get If i >= 0 And i < m.Count Then Return m(i) Else Return Nothing End If End Get End Property Public Sub Vorwaerts() i += 1 If i >= m.Count Then i = -1 RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("DetailView")) End Sub Public Sub Rueckwaerts() i -= 1 If i < 0 Then i = -1 RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("DetailView")) End Sub Public Event PropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged End Class Public Class Model Inherits List(Of Datensatz) Public Sub New() For i = 1 To 9 Me.Add(New Datensatz With {.ID = i, .Inhalt = String.Format("Zeile {0}", i)}) Next End Sub End Class Public Class Datensatz Public Property ID As String Public Property Inhalt As String End Class
--
Viele Gruesse
Peter- Als Antwort vorgeschlagen Robert Breitenhofer Mittwoch, 6. Oktober 2010 16:28
- Als Antwort markiert le.wugel Donnerstag, 7. Oktober 2010 16:15
- Tag als Antwort aufgehoben le.wugel Montag, 18. Oktober 2010 15:39
Samstag, 2. Oktober 2010 18:31 -
Das funktioniert soweit, jedoch kommt es leider für mein Problem nicht als Lösung in Frage.
Kurz zu dem, was ich erreichen möchte.
Ich habe eine List<List<Person>>
und eine public static int _index :INotifyPropertyChanged in der App.xaml.cs .
Für jede List<Person> erzeuge ich einen Button
-> click.event dieser öffnet einen PopUp
-> Textboxes dieser PopUps sollen an Person-Propertys gebunden sein,
wobei der globale integer _index jeweils das gewünschte Person-Objekt indiziert.
Beispiel:
_index = 7
button3.click erzeugt neues PopUp, dieses zeigt mir PersonPropertys von
List[3][7] an.
button12.click erzeugt neues PopUp, dieses zeigt mir PersonPropertys von
List[12][7] an.
Funktioniert alles soweit, NUR:
wenn _index sich jetzt ändert, soll sich dem entsprechend die AngezeigtenPersonPropertys in den Popups ändern.
Vielen Dank für eure Hilfe
Montag, 18. Oktober 2010 15:39 -
Hallo an alle,
danke noch einmal für eure Hilfe.
Hier meine Lösung des Problems.
Ich habe mir eine Converter geschrieben, welcher den aktuellen Index entgegen nimmt
und mir das dafür entsprechende Listenelement zurück liefert.
Beispiel:
converter:
public class IntConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return App.historyNodeList2[System.Convert.ToInt32(value)];
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.ToString();
}
}
Binding an Listenelement in Abhängigkeit von einem globalen Index:- App._historyIndex ist von INotifyPropertyChanged abgeleitet
IntConverter IC = new IntConverter();
Binding bind = new Binding();
bind.Converter = IC;
bind.Source = App._historyIndex;
bind.Path = new PropertyPath("History_Index");
ColumnSeries bs = new ColumnSeries();
bs.SetBinding(ColumnSeries.ItemsSourceProperty, bind);
- Als Antwort markiert Robert Breitenhofer Donnerstag, 28. Oktober 2010 11:16
Donnerstag, 28. Oktober 2010 10:44