【问题标题】:Windows phone 8.1 : display key from Dictionary<string,string> in xamlWindows phone 8.1:在 xaml 中显示来自 Dictionary<string,string> 的键
【发布时间】:2015-06-18 16:09:00
【问题描述】:

下面是我的json

{"Hello":[{"CompanyName":"one","ETA":"10","Invoice":{"TF1":" 49","BF1":" 49","MD1":"2 Km","FPk1":" 12","att":"1 mins"},"tf3":"49"},{"CompanyName":"one","ETA":"10","Invoice":{"TF1":" 49","BF1":" 49","MD1":"2 Km","FPk1":" 15","att":"1 mins"},"tf3":"49"}],"ChildPresent":true}

我正在反序列化所有内容,我的主要问题是 Invoice 对象 ("Invoice":{"TF1":" 49","BF1":" 49","MD1":"2 Km","FPk1":" 15","att":"1 mins"},"tf3":"49"}]),其中包含一堆键和值...问题在于“Invoice”对象中的键每 6 小时更改一次...我需要在 xaml 中同时显示键和值

现在我将上述 json 内容反序列化为 Modal,并将 Invoice 对象数据存储到 Dictionary 中

RootObject j = JsonConvert.DeserializeObject<RootObject>(json);

public class Hello {
    public Dictionary<string, string> Invoice { get; set; }
    public string CompanyName {get;set;}
    public string ETA {get;set;}
}

当我写在 XAML{Binding Invoice[TF1]} 我得到了 TF1 的值,但我希望 TF1 键显示在 XAML 中。

【问题讨论】:

  • 我已经反序列化了 json 并且 json 值被存储在字典中......你到底想要什么
  • public class Taxi { public Dictionary Invoice { get;放; } 公共字符串是 { 得到;设置;} 公共字符串 ETA { 获取;放; } 公共字符串类型 { 获取;放; } 公共字符串 Lat { 获取;放; } 公共字符串 Lng { 获取;放; } }
  • 您的问题是您正在尝试绑定到 Dictionary。字典在装订方面很糟糕。绑定将它们视为 IEnumerable>。这是一大堆废话。尽可能远离它。
  • IEnumerable> 给定一个 json 反序列化错误
  • 这样做有什么意义?如果您需要字典中的一个条目,只需在代码中检索它而不是绑定到它。绑定到检索值的属性,例如public string RelevantInvoice {get { return Invoice[FirstName]; } } 或类似的东西。

标签: c# wpf wcf windows-phone-8 windows-phone-8.1


【解决方案1】:

正确的语法是{Binding Path=Invoice.Key}。由于这不起作用,请确保您在页面顶部设置了正确的 DataContext。标题应如下所示:

<Page
    ...
    DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}"
    ...>

这意味着 XAML 将在其附加到的代码隐藏文件中查找字典(即,如果您的 XAML 文件是 Page.xaml,那么代码隐藏文件是 Page.xaml.cs)。如果你不指定这个,那么它不知道去哪里寻找Invoice


(注意:由于您正在为 Windows Phone 8.1 开发,如果您转到 Visual Studio 并为 Windows Phone 创建一个 Hub 应用模板项目,它应该演示如何绑定到一个 Dictionary from XAML。)

【讨论】:

  • 我已经将 Viewmodel 绑定到列表视图,因为我通过使用 {Binding Path=Invoice[FirstName]} 获取键的值
【解决方案2】:

Dictionary&lt;,&gt; 没有 Key 属性。有一个Keys 属性,但无法使用命名值对其进行索引。

要在 xaml 中显示的键名

这毫无意义...Name 的关键?还是将文字 Name 中的 key 的值作为键?

 <TextBlock Text="{Binding Path=Invoice[Name]}" />

或文字。

 <TextBlock Text="Name" />

【讨论】:

    【解决方案3】:

    尝试指定 Path=:

    <ListView ItemsSource="{Binding Path=Invoice}">
        <ListView.ItemTemplate>
            <DataTemplate>
               <TextBlock Text="{Binding Path=Key}"></TextBlock>
               <TextBlock Text="{Binding Path=Value}"></TextBlock>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    

    【讨论】:

    • 使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2015-09-11
    • 1970-01-01
    • 2012-03-01
    • 2015-05-23
    • 2012-10-23
    相关资源
    最近更新 更多