将WPF转换为Windows应用商店列表框问题

时间:2015-04-13 23:51:53

标签: c# linq mvvm windows-store-apps

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

所以,这是我开发的课程。

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

主要课程:

    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:

提醒我 | 编辑 | 改变类型 题 你不能在自己的帖子上投票 0

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

所以,这是我开发的课程。

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提出了挑战,我很自豪,这是我问题的主要原因)。

queryXMLMethod queryXMLText2Method

1 个答案:

答案 0 :(得分:0)

所以,我的问题的答案如下。 而不是使用LINQ和Lambda表达式,我只需要自己使用LINQ。 所以,让我们打破这个。

var listOEnglish =来自XDoc.Root.Elements中的wordList(&#34; Word&#34;)

//这一行声明了我们想要迭代的根元素。

选择wordList.Element(&#34;英语&#34;)。值;

//这一行是设置我们想要用英语标签中的单词迭代的子元素。

listBx.ItemsSource = listOEnglish.ToList();

//此行将列表框的itemsource或数据绑定设置为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();
}