myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und Silverlight » [gelöst]DataGrid RowDetails werden nicht angezeigt
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[gelöst]DataGrid RowDetails werden nicht angezeigt

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Ahrimaan Ahrimaan ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-312.gif


Dabei seit: 23.03.2010
Beiträge: 220
Entwicklungsumgebung: VS 2010
Herkunft: Thorn


Ahrimaan ist offline

[gelöst]DataGrid RowDetails werden nicht angezeigt

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,
ich habe ein Problem mit einer View und dem Binding :

XML-Code:
<UserControl x:Class="RAE.Client.View.ShowTaskOverviewView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:c="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" mc:Ignorable="d"
             d:DesignHeight="360" d:DesignWidth="797"
>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="80*"/>
            <ColumnDefinition Width="180"/>
        </Grid.ColumnDefinitions>
        <Expander Grid.Column="2" ExpandDirection="Down" Header="Suchoptionen">
            <Expander.Content>
                <Grid>

                </Grid>
            </Expander.Content>
        </Expander>
        <c:DataGrid Grid.Column="0"  Grid.Row="0" ItemsSource="{Binding Persons}" AlternatingRowBackground="Aqua" CanUserReorderColumns="True" CanUserSortColumns="True"
                    CanUserResizeColumns="True" IsReadOnly="True" SelectedItem="{Binding CurrentItem}" ColumnHeaderStyle="{StaticResource ResourceKey=EmployeeGridColumnHeader}"
                    CellStyle="{StaticResource ResourceKey=EmployeeGridCellStyle}"
>
            <c:DataGrid.RowDetailsTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Path=Tasks}">
                    <Grid>
                         <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="30"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <c:DataGrid Grid.Column="1">
                            <c:DataGrid.Columns>
                                <c:DataGridTemplateColumn Header="Name">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding Name}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Erstellt Am">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding CreateDate}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Erstellt Von">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding CreatedFrom,Path=Name}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Geschlossen von">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding ClosedBy,Path=Name}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Geschlossen am">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding ClosedDate}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                            </c:DataGrid.Columns>
                        </c:DataGrid>
                    </Grid>

                </HierarchicalDataTemplate>
            </c:DataGrid.RowDetailsTemplate>
            <c:DataGrid.Columns>

                <c:DataGridTemplateColumn Header="ID" Visibility="Hidden">
                    <c:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=ID}" />
                        </DataTemplate>
                    </c:DataGridTemplateColumn.CellTemplate>

                </c:DataGridTemplateColumn>

                <c:DataGridTemplateColumn Header="Nachname" Width="150">
                    <c:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Nachname}" TextAlignment="Left"  VerticalAlignment="Center" FontFamily="Courier New"/>
                        </DataTemplate>
                    </c:DataGridTemplateColumn.CellTemplate>
                </c:DataGridTemplateColumn>

                <c:DataGridTemplateColumn Header="Vorname" Width="150">
                    <c:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Vorname}" TextAlignment="Left" VerticalAlignment="Center" FontFamily="Courier New"/>
                        </DataTemplate>
                    </c:DataGridTemplateColumn.CellTemplate>
                </c:DataGridTemplateColumn>

                <c:DataGridTemplateColumn Header="Personalnummer" Width="100">
                    <c:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=PersonalNummer}" TextAlignment="Left" VerticalAlignment="Center" FontFamily="Courier New"/>
                        </DataTemplate>
                    </c:DataGridTemplateColumn.CellTemplate>
                </c:DataGridTemplateColumn>
            </c:DataGrid.Columns>
        </c:DataGrid>
    </Grid>
</UserControl>

Und das ViewModel:

C#-Code:
using System.Linq;
using RAE.Client.Extensions;
using RAE.Client.Model;
using RAE.Client.Session;
using RAE.Data.Models;
using WpfBase;

namespace RAE.Client.ViewModel
{
    public class ShowTaskOverviewViewModel:BaseWorkspaceViewModel
    {
        public ShowTaskOverviewViewModel(int windowId) : base(windowId)
        {
            if (DataManager.IsAdmin)
            {
                DataManager.Repository.GetAllEmployesCompleted += (s, e) =>
                {
                    Persons = new ThreadSafeObservableCollection<Model.EmployeeModel>();
                    if(e.Employees != null)
                        e.Employees.ForEach(p => Persons.Add(p.ToModel()));
                };
                DataManager.Repository.GetAllEmployeesAsync();
            }
            else
            {
                DataManager.Repository.GetAllEmployesByEmployeeCompleted += (s, e) =>
                {
                    Persons = new ThreadSafeObservableCollection<Model.EmployeeModel>();
                    if (e.Employees != null)
                        e.Employees.ForEach(p => Persons.Add(p.ToModel()));
                };
                DataManager.Repository.GetAllEmployeesByEmployeeAsync(DataManager.CurrentUser);
            }
            this.DisplayName = "Aufgabenübersicht";
            Tasks = new ThreadSafeObservableCollection<RAETask>();
        }

        public ShowTaskOverviewViewModel(int windowId,Employee emp)
            : base(windowId)
        {
            _persons = new ThreadSafeObservableCollection<Model.EmployeeModel>();
            this.DisplayName = "Aufgabenübersicht";
        }

        private EmployeeModel _currentItem;
        public EmployeeModel CurrentItem
        {
            get { return _currentItem; }
            set { _currentItem = value;FillTaskForEmployee(); OnPropertyChanged(() => CurrentItem); }
        }

        private ThreadSafeObservableCollection<Model.EmployeeModel> _persons;
        public ThreadSafeObservableCollection<Model.EmployeeModel> Persons
        {
            get { return _persons; }
            set { _persons = value;OnPropertyChanged(() => Persons); }
        }

        private ThreadSafeObservableCollection<RAETask> _tasks;
        public ThreadSafeObservableCollection<RAETask> Tasks
        {
            get { return _tasks; }
            set { _tasks = value;OnPropertyChanged(() => Tasks); }
        }

        private void FillTaskForEmployee()
        {
            Tasks.Clear();
            _currentItem.Tasks.ToList().ForEach(p => Tasks.Add(p));
            OnPropertyChanged(() => Tasks);
        }
    }
}

Wenn ich auf eine Row klicke erscheinen zwar die RowDetails aber nur die Header.
Es werden keine Daten angezeigt. Die Namen der Propertys passen aber alle.
Sieht jmd auf den ersten Blick, wo der Fehler liegt ?

Grüße

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Ahrimaan am 19.04.2012 10:49.

18.04.2012 10:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rongchaua
myCSharp.de-Mitglied

Dabei seit: 12.11.2009
Beiträge: 90


rongchaua ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Ahrimaan: Ich denke "Tasks" muss ein Property von "Person" sein. DataGrid lädt jedes Person in eine Zeile und "RowDetails" bindet noch mal die Eigenschaften des "Person" in SubDataGrid. "Tasks" ist nicht Eigenschaft des "Person" daher SubDataGrid ist leer.
18.04.2012 11:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Ahrimaan Ahrimaan ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-312.gif


Dabei seit: 23.03.2010
Beiträge: 220
Entwicklungsumgebung: VS 2010
Herkunft: Thorn

Themenstarter Thema begonnen von Ahrimaan

Ahrimaan ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi, Tasks ist eine Property von Person ...
18.04.2012 11:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taladan Taladan ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-2980.jpg


Dabei seit: 06.04.2008
Beiträge: 555
Entwicklungsumgebung: Microsoft Visual Studio 2010
Herkunft: Osnabrück


Taladan ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

kann es sein das der ausdruck Path fehlt, also statt
{Binding CreateDate}
das brachte bei mir korrekte Ergebnisse.
{Binding Path=CreateDate}

du kannst auch PresentationTraceSources.TraceLevel="High" noch einfügen, dann bekommt man ggf mehr debuginformationen.
19.04.2012 10:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Ahrimaan Ahrimaan ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-312.gif


Dabei seit: 23.03.2010
Beiträge: 220
Entwicklungsumgebung: VS 2010
Herkunft: Thorn

Themenstarter Thema begonnen von Ahrimaan

Ahrimaan ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

ich habe den Fehler gefunden:
Ich muss dem DataGrid in dem Template die ItemSource geben nicht dem Template selber.
Dadurch ist es auch unnötig ein HierachicalDataTemplate zu nutzen, das macht das DataGrid bereits.
Es Reicht also ein normales DataTemplate :-)

XML-Code:
<c:DataGrid.RowDetailsTemplate>
                <DataTemplate >
                    <Grid>
                         <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="30"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <c:DataGrid Grid.Column="1" ItemsSource="{Binding Path=Tasks}" AutoGenerateColumns="False">
                            <c:DataGrid.Columns>
                                <c:DataGridTemplateColumn Header="Name">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding Path=Name}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Erstellt Am">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding CreateDate}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Erstellt Von">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding CreatedFrom,Path=Name}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Geschlossen von">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding ClosedBy,Path=Name}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                                <c:DataGridTemplateColumn Header="Geschlossen am">
                                    <c:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding ClosedDate}"/>
                                        </DataTemplate>
                                    </c:DataGridTemplateColumn.CellTemplate>
                                </c:DataGridTemplateColumn>
                            </c:DataGrid.Columns>
                        </c:DataGrid>
                    </Grid>

                </DataTemplate>
            </c:DataGrid.RowDetailsTemplate>
19.04.2012 10:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 22.05.2013 17:57