【问题标题】:Binding to a list inside parents datacontext绑定到父数据上下文中的列表
【发布时间】:2015-07-21 21:38:56
【问题描述】:

在 Windows 应用商店应用项目中,我有以下控制权

<ListView x:Name="MyMeetsRow"  Grid.Column="0" ItemsSource="{Binding Source={StaticResource cvsActivities}}" Style="{StaticResource MyMeetingsRowUsers}" GroupStyleSelector="{StaticResource listGroupStyleSelector}" />

使用这些样式:

<DataTemplate x:Key="MyMeetingUser">
    <Grid Margin="0,0,0,10" >
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel Height="78" Width="875">
            <StackPanel.Background>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0,1"  >
                    <GradientStop Color="#FF0072C6" Offset="0"/>
                    <GradientStop Color="#FF008FD4" Offset="1"/>
                </LinearGradientBrush>
            </StackPanel.Background>
            <Grid >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="90"/>
                    <ColumnDefinition Width="65"/>
                    <ColumnDefinition Width="388"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>

                <TextBlock x:Name="MyMeetingRowDayNumber" Grid.Column="0" Text="{Binding MyMeetingRowDayNumber}" Style="{StaticResource MyMeetingsRowDay}"   />
                <Grid Grid.Column="1">
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <TextBlock Grid.Row="0" x:Name="MyMeetingRowDayText" Text="{Binding MyMeetingRowDayText}" Style="{StaticResource MyMeetingsRowDayText}" Height="28"></TextBlock>
                    <TextBlock Grid.Row="1" x:Name="MyMeetingRowDayHour" Text="{Binding MyMeetingRowDayHour}" Style="{StaticResource MyMeetingsRowDayHour}" ></TextBlock>
                </Grid>
                <TextBlock Grid.Column="2" x:Name="MyMeetingsRowTitle" Text="{Binding MyMeetingsRowTitle}" Style="{StaticResource MyMeetingsRowTitle}" />
                <!--<ScrollViewer Grid.Column="3" HorizontalScrollBarVisibility="Auto" DataContext="{Binding Item}" VerticalScrollBarVisibility="Disabled" HorizontalScrollMode="Auto" VerticalScrollMode="Disabled">
                    <GridView DataContext="{Binding Invitees}">
                        <GridView.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding status}"/>
                            </DataTemplate>
                        </GridView.ItemTemplate>
                    </GridView>
                </ScrollViewer>-->
            </Grid>
        </StackPanel>
    </Grid>
</DataTemplate>

<GroupStyle x:Key="listViewGroupStyle">
    <GroupStyle.HeaderTemplate>
        <DataTemplate>
            <Grid Background="#8e8e8e" Width="805" Height="75" Margin="0,0,0,13">
                <TextBlock Text='{Binding Key}' Foreground="White" Margin="10,10,0,0" FontFamily="Segoe UI Light" FontSize="55" FontWeight="Light" FontStyle="Normal"/>
            </Grid>
        </DataTemplate>
    </GroupStyle.HeaderTemplate>
</GroupStyle>

<Style x:Key="MyMeetingsRowUsers" TargetType="ListView" >
    <Setter Property="HorizontalContentAlignment" Value="Right" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden" />
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="TabNavigation" Value="Local"/>
    <Setter Property="IsHoldingEnabled" Value="True"/>
    <Setter Property="Margin" Value="44,36,0,0" />
    <Setter Property="SelectionMode" Value="None" />
    <Setter Property="ItemTemplate" Value="{StaticResource MyMeetingUser}" />
    <Setter Property="Transitions">
        <Setter.Value>
            <TransitionCollection>
                <EntranceThemeTransition />
            </TransitionCollection>
        </Setter.Value>
    </Setter>
</Style>

我绑定到它的项目就是这个列表

    private ObservableCollection<MeetingRow<Meeting>> myMeet = new ObservableCollection<MeetingRow<Meeting>>();

...

var result = from m in MyMeets group m by m.FullMonth into grp orderby grp.Key select grp;
            cvsActivities.Source = result;

对于会议类,它看起来像这样:

public class MeetingRow<T> : BindableBase
{
    private T item;
    public T Item
    {
        get { return item; }
        set { SetProperty(ref item, value); }
    }

    private string myMeetingRowDayNumber;
    public string MyMeetingRowDayNumber
    {
        get { return myMeetingRowDayNumber; }
        set { SetProperty(ref myMeetingRowDayNumber, value); }
    }

    private string myMeetingRowDayText;
    public string MyMeetingRowDayText
    {
        get { return myMeetingRowDayText; }
        set { SetProperty(ref myMeetingRowDayText, value); }
    }

    private string myMeetingRowDayHour;
    public string MyMeetingRowDayHour
    {
        get { return myMeetingRowDayHour; }
        set { SetProperty(ref myMeetingRowDayHour, value); }
    }

    private string myMeetingsRowTitle;
    public string MyMeetingsRowTitle
    {
        get { return myMeetingsRowTitle; }
        set { SetProperty(ref myMeetingsRowTitle, value); }
    }

    private string fullMonth;
    public string FullMonth
    {
        get { return fullMonth; }
        set { SetProperty(ref fullMonth, value); }
    }
}

和我的会议班

public class Meeting
{
    public string Id { get; set; }
    public string Organizer { get; set; }
    public string Organization { get; set; }
    public string Name { get; set; }
    public string MeetingType { get; set; }
    public string Description { get; set; }
    public Point Address { get; set; } //X = LAT; Y=LNG
    public DateTime StartDate { get; set; }
    public DateTime EndTime { get; set; }
    public string Status { get; set; }
    public List<MeetingPoint> MeetingPoints { get; set; }
    public List<MeetingInvitee> Invitees { get; set; }
}

在我填充我的 cvsActivities 变量以放入 ListView ItemSource 后,它会正确显示信息,但现在我需要访问 cvsActivities 列表上每个 MeetingRow 中 Item 参数内的 List&lt;MeetingInvitee&gt; 以填充注释的 ScrollViewer。基本上我想访问父 ItemSource 上每个项目内的列表。

任何想法我怎么能做到这一点? 谢谢。

【问题讨论】:

  • 你搞定了吗?
  • 是的,我最终得到的东西与我开始的地方有点不同

标签: c# windows xaml listview windows-store-apps


【解决方案1】:

难道你不能将你的listviewitem 从你的listview 转换为一个Meeting 对象,然后用它来获取你的Invitees 吗?

例如,如果您想从 listviewselecteditem 获得它:

ListViewItem item = (Meeting)MyMeetsRow.SelectedItems[0];
Meeting AMeeting = new Meeting();
AMeeting.Invitees  = item.Invitees;

如果我有一段时间没有使用 C# 有任何语法错误,请告诉我

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2013-01-20
    • 2017-03-28
    • 2015-06-11
    • 2013-05-04
    • 2016-03-15
    相关资源
    最近更新 更多