将 WPF 转换为 Windows Store App Listbox 问题

Converting WPF to Windows Store App Listbox issue

我制作了一个 windows 桌面应用程序,现在正在制作该程序的 Windows 8/8.1/10 商店应用程序版本。我知道我必须使用更多的 MVVM 编码才能使其正常工作,此外还有更多的代码隐藏。对于那些想要查看原始桌面程序的人,它位于 https://github.com/JescoInc/Japanese-and-English-Speech-Dictionary

所以,这是我开发的 classes。

namespace WindowsEJDictionary
{
    public class xmlData
    {
        private string english;
        private string romaji;
        private string kanji;

        public string English
        {

            get { return english; }

            set { english = value; }

        }

        public string Romaji
        {
            get { return romaji; }

            set { romaji = value; }
        }

        public string Kanji
        {
            get { return kanji; }

            set { kanji = value; }
        }
    }
}

主要class:

    private void queryXML()
    {
        string xmlPath = "JapaneseEnglishData.xml";
        XDocument xDoc = XDocument.Load(xmlPath);

        var lstWord = xDoc.Root.Elements("Word").Select(x => new
        {
            English = x.Element("English").Value
        }).ToList();

        this.listBx.ItemsSource = lstWord;
        }
    }
   private void queryXMLTest2()
    {
        string xmlPath = "JapaneseEnglishData.xml";
        XDocument xDoc = XDocument.Load(xmlPath);

        var lstWord = from item in xDoc.Descendants("Word")
                      select new
                      {
                          English = item.Element("English").Value,
                      };
        foreach (var i in lstWord)
        {
            listBx.ItemsSource = i.English.ToList();
        }

XAML:

提醒我 | 编辑 | 更改类型 题 你不能自己投票 post 0

我制作了一个 windows 桌面应用程序,现在正在制作该程序的 Windows 8/8.1/10 商店应用程序版本。我知道我必须使用更多的 MVVM 编码才能使其正常工作,此外还有更多的代码隐藏。对于那些想要查看原始桌面程序的人,它位于 https://github.com/JescoInc/Japanese-and-English-Speech-Dictionary

所以,这是我开发的 classes。

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        queryXML();
    }

    private void queryXML()
    {
        string xmlPath = "JapaneseEnglishData.xml";
        XDocument xDoc = XDocument.Load(xmlPath);

        var lstWord = xDoc.Root.Elements("Word").Select(x => new
        {
            English = x.Element("English").Value
        }).ToList();

        this.listBx.ItemsSource = lstWord;
        }
    }
}

XAML代码:

<Page
    x:Class="WindowsEJDictionary.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:WindowsEJDictionary"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto">
            </RowDefinition>
        </Grid.RowDefinitions>

        <Button Content="Button" HorizontalAlignment="Left" Margin="718,625,0,0" VerticalAlignment="Top" Width="144"/>
        <ListBox Name="listBx" HorizontalAlignment="Left" Height="398" Margin="109,255,0,0" VerticalAlignment="Top" Width="494"/>

    </Grid>
</Page>

和XML文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--This is a generated XML File-->
<WordList>
  <Word>
    <English>Sunday</English>
    <Romaji>nichiyoubi</Romaji>
    <Kanji>にちようび</Kanji>
  </Word>
  <Word>
    <English>Weekend</English>
    <Romaji>shuumatsu</Romaji>
    <Kanji>しゅうまつ</Kanji>
  </Word>
  <Word>
    <English>vacation</English>
    <Romaji>yasumi</Romaji>
    <Kanji>やすみ</Kanji>
  </Word>
  <Word>
    <English>rest</English>
    <Romaji>yasumi</Romaji>
    <Kanji>やすみ</Kanji>
  </Word>
  <Word>
    <English>Goodnight</English>
    <Romaji>oyasumi nasai</Romaji>
    <Kanji>おやすみなさい</Kanji>
  </Word>
</WordList>

好的,现在介绍一些背景知识。测试 1 和测试 2 产生不同的结果,但都产生不需要的结果。所以,这里是结果截图的链接。 (注意:我是 LINQ 挑战者,我非常讨厌它,这是我遇到问题的主要原因)。

所以,我的问题的答案如下。 与其使用 LINQ 和 Lambda 表达式,我应该只需要单独使用 LINQ。 那么,让我们分解一下。

var listOEnglish = 来自 XDoc.Root.Elements("Word")

中的 wordList

// 这一行声明了我们要遍历的根元素。

select wordList.Element("English").Value;

//这一行设置了我们要遍历的子元素,里面的单词是英文标签。

listBx.ItemsSource = listOEnglish.ToList();

// 此行将列表框的项目源或数据绑定设置为来自 listOEnglish 作为列表。

非常感谢来自 FlatRedBall (FRB) 社区的 Jesse 向我展示了如何使用 LINQ 并帮助我提出解决方案。

private void queryXML2()
{
    string xmlPath = "JapaneseEnglishData.xml";
    XDocument XDoc = XDocument.Load(xmlPath);

    var listOEnglish = from wordList in XDoc.Root.Elements("Word")
                       select wordList.Element("English").Value;
    listBx.ItemsSource = listOEnglish.ToList();
}