繁体   English   中英

在Windows Phone 8.1中绑定到ListView的字典(ObservableCollection)

[英]Dictionary (ObservableCollection) binding to ListView in Windows Phone 8.1

我正在尝试将字典绑定到列表视图中的两个文本块。 listview ItemsSource绑定在后面的代码中定义,文本块的内容在XAML中。

我能够显示这些项目,但是它们在每行周围都用方括号显示,例如[stringA,stringB]。 但是,这种格式不起作用。 我尝试的最新代码是通过设置无效的键和值来进行的:

XAML:

           <ListView Name="lvListLogs" 
                      Margin="0,10,0,0">
                <ListView.ItemTemplate>

                    <DataTemplate x:Name="ListItemTemplate">
                        <Grid Margin="5,0,0,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="122"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition MaxHeight="104"></RowDefinition>
                            </Grid.RowDefinitions>
                            <TextBlock x:Name="tb_PointName" Grid.Column="1"
                                                   Text="{Binding Key}"
                                                   Margin="10,0,0,0" FontSize="40" 
                                                   TextWrapping="Wrap"
                                                   MaxHeight="72" 
                                                   Foreground="#FFFE5815" />

                            <TextBlock x:Name="tb_PointValue" Grid.Column="1"
                                                   Text="{Binding Value}"
                                                   Margin="10,0,0,0" FontSize="40" 
                                                   TextWrapping="Wrap"
                                                   MaxHeight="72" 
                                                   Foreground="#FFFE5815" />

                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

C#(为清楚起见,略):

public Dictionary<string, string> mydict2 { get; set; }

mydict2 = new Dictionary<string, string>();


        if (item != null)
            {
                var props = item.GetType().GetRuntimeProperties();

                foreach (var prop in props)
                {
                    foreach (var itm in group1.Items.Where(x => x.UniqueId == prop.Name))
                    {
                        var _Title = prop.Name;
                        var _Value = prop.GetValue(item, null);

                        string propertyValue;
                        string propertyName;

                        propertyValue = Convert.ToString(_Value);
                        propertyName = _Title;

                        mydict2.Add(_Title, propertyValue);
                    }
                }
                //binding here
                lvListLogs.ItemsSource = mydict2;

            }

任何援助将不胜感激。

您的代码工作正常,问题在于您为两个TextBlocks设置了相同的Grid.Column 第一列索引应为零:

<TextBlock x:Name="tb_PointName" Grid.Column="0" ...

为了实现所需的绑定,我使用了ObservableCollection以及类和构造函数,而不是Dictionary。

要将列表视图(xaml)绑定到ObservableCollection:

用构造函数创建类

    public class PointInfoClass
    {
        public string PointName { get; set; }
        public string PointValue { get; set; }

        public PointInfoClass(string pointname, string pointvalue)
        {
            PointName = pointname;
            PointValue = pointvalue;

        }
    }

创建PointInfoClass的集合

    public ObservableCollection<PointInfoClass> PointInfo
    {
        get
        {
            return returnPointInfo;
        }
    }

实例化集合

    ObservableCollection<PointInfoClass> returnPointInfo = new ObservableCollection<PointInfoClass>();

将项目添加到收藏夹

returnPointInfo.Add(new PointInfoClass(string1, string2));

数据绑定到ObservableCollection名称。 xaml代码:

    <ListView
        Grid.Row="1"
        ItemsSource="{Binding PointInfo}" 
        IsItemClickEnabled="True"
        ItemClick="ItemView_ItemClick"
        Margin="19,0.5,22,-0.333"
        x:Name="lvPointInfo" 
    Background="White">
        <ListView.ItemTemplate>
            <DataTemplate >
                <Grid Margin="0,0,0,20">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="270"/>
                        <ColumnDefinition Width="60"/>
                    </Grid.ColumnDefinitions>

                    <StackPanel Orientation="Vertical"  Grid.Column="1" VerticalAlignment="Top">                           
                        <TextBlock x:Name="tb_PointSubTitle" Grid.Column="1"
                                    Text="{Binding PointName}"
                                    Margin="10,0,0,0" FontSize="20" 
                                    TextWrapping="Wrap"
                                    MaxHeight="72" 
                                   Foreground="#FF5B5B5B"
                                                    />
                    </StackPanel>
                    <StackPanel Orientation="Vertical"  Grid.Column="2" VerticalAlignment="Top" HorizontalAlignment="Right">
                        <TextBlock x:Name="tb_PointValue" 
                                    Grid.Column="1"
                                    Text="{Binding PointValue}"
                                    Margin="0,5,0,0" FontSize="20" 
                                    HorizontalAlignment="Right"
                                    TextWrapping="Wrap"
                                   FontWeight="Normal"
                                   Foreground="Black" />

                    </StackPanel>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

设置ListView的DataContext

lvPointInfo.DataContext = this;

为了清楚起见,对代码进行了编辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM