【问题标题】:Dictionary (ObservableCollection) binding to ListView in Windows Phone 8.1字典(ObservableCollection)绑定到 Windows Phone 8.1 中的 ListView
【发布时间】:2015-07-04 22:52:09
【问题描述】:

我正在尝试将字典绑定到列表视图中的两个文本块。 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;

            }

任何帮助将不胜感激。

【问题讨论】:

    标签: c# wpf xaml listview windows-phone-8


    【解决方案1】:

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

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

    【讨论】:

    • 即使第一个 Grid.Column 设置为零,也不会显示任何值
    【解决方案2】:

    为了实现所需的绑定,我使用带有类和构造函数的 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 名称。 xml代码:

        <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;
    

    为清楚起见,编辑此代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-04
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多