将 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();
}
我制作了一个 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();
}