C# 如何根据xml文件中的数据数量在列表框中加载datatemplate
我在xml文件中有一个任务列表,我希望它将它绑定到标签上,在每个模板的每个标签上一个接一个,我无法按照xml文件中任务的数量加载模板。任务的数量应该等于模板的数量,标签应该包含任务的名称,我被困在这里是数据模板的代码C# 如何根据xml文件中的数据数量在列表框中加载datatemplate,c#,xml,wpf,C#,Xml,Wpf,我在xml文件中有一个任务列表,我希望它将它绑定到标签上,在每个模板的每个标签上一个接一个,我无法按照xml文件中任务的数量加载模板。任务的数量应该等于模板的数量,标签应该包含任务的名称,我被困在这里是数据模板的代码 <Window.Resources> <DataTemplate x:Key="tasktemplate1"> <Canvas Height="50" Width="850">
<Window.Resources>
<DataTemplate x:Key="tasktemplate1">
<Canvas Height="50" Width="850">
<Label Height="30" Width="170" Canvas.Top="10" Canvas.Left="130" Background="LightGray">
</Label>
<TextBox Height="30" Width="120" Canvas.Top="10" Canvas.Left="370" Background="LightBlue"></TextBox>
<Label Canvas.Left="500" Canvas.Top="10">$</Label>
<Button Click="deletebuttonclick" Canvas.Top="12" Height="10" Width="30" Canvas.Left="600" ></Button>
</Canvas>
</DataTemplate>
</Window.Resources>
$
对于listbox,代码如下所示
<TabItem>
<Canvas Height="700" Width="850">
<ListBox ItemTemplate="{StaticResource tasktemplate1}" ItemsSource="{Binding NameList}" x:Name="listBox" Height="700" Width="850">
</ListBox>
<Label Canvas.Top="-18" Canvas.Left="185">Select Task</Label>
<Label Canvas.Top="-18" Canvas.Left="377" RenderTransformOrigin="0.58,0.462">Enter Bill Rates</Label>
<Button Canvas.Left="39" Canvas.Top="575" Width="139">Click to add the task</Button>
</Canvas>
</TabItem>
选择任务
输入票据费率
单击以添加任务
目前,我正在将其绑定到我手动创建的名称列表。后面的代码取决于此代码,创建了4个数据模板,但我无法从模板标签上的xml文件中获取任务
private void Window_Loaded(object sender, RoutedEventArgs e)
{
XmlDocument doc1 = new XmlDocument();
doc1.Load("http://store.tymesheet.com/templates/Software-Developer.xml");
XmlElement root = doc1.DocumentElement;
XmlNodeList nodes = root.SelectNodes("Tasks/task");
string temp=null;
foreach(XmlNode node in nodes)
{
temp = node["name"].InnerText;
}
_nameList = new List<string>
{
"1",
"2",
"3",
"4",
};
DataContext = this;
}
private List<string> _nameList;
public List<string> NameList
{
get { return _nameList; }
}
private void Window\u已加载(对象发送方,路由目标)
{
XmlDocument doc1=新的XmlDocument();
doc1.加载(“http://store.tymesheet.com/templates/Software-Developer.xml");
XmlElement root=doc1.DocumentElement;
XmlNodeList nodes=root.SelectNodes(“任务/任务”);
字符串temp=null;
foreach(节点中的XmlNode节点)
{
temp=节点[“名称”]。InnerText;
}
_名称列表=新列表
{
"1",
"2",
"3",
"4",
};
DataContext=this;
}
私人名单(姓名名单),;
公开名单
{
获取{return\u nameList;}
}
xml文件的屏幕截图如下所示
这里是我的模板外观的屏幕截图
如果您需要获取任务的
名称
,您可以直接在XAML中使用XmlDataProvider
,它将充当列表框的项目资源
<Canvas Height="700" Width="850">
<Canvas.Resources>
<XmlDataProvider x:Key="Tasks" XPath="tasks"
Source="http://store.tymesheet.com/templates/Software-Developer.xml"/>
<DataTemplate x:Key="tasktemplate1">
<Canvas Height="50" Width="850" Background="lightgray">
<Label Content="{Binding XPath=name}" Height="30"
Width="170" Canvas.Top="10" Canvas.Left="150"
Background="LightGray"/>
<TextBox Height="30" Width="60" Canvas.Top="10"
Canvas.Left="370" Background="Black"/>
<Label Canvas.Left="500" Canvas.Top="10">$</Label>
<Button Click="deletebuttonclick"
Canvas.Top="12" Height="10" Width="30"
Canvas.Left="600"/>
</Canvas>
</DataTemplate>
</Canvas.Resources>
<ListBox ItemTemplate="{StaticResource tasktemplate1}"
ItemsSource="{Binding Path=ChildNodes, Source={StaticResource Tasks}}"
x:Name="listBox" Height="700" Width="850"/>
....
</Canvas>
在XAML中:
将标签内容绑定到绑定,如下所示:
<Canvas Height="700" Width="850">
<Canvas.Resources>
<DataTemplate x:Key="tasktemplate1">
<Canvas Height="50" Width="850" Background="lightgray">
<Label Content="{Binding}" <-- HERE
Height="30" Width="170"
Canvas.Top="10" Canvas.Left="150"
Background="LightGray"/>
<TextBox Height="30" Width="60" Canvas.Top="10"
Canvas.Left="370"
Background="Black"/>
<Label Canvas.Left="500" Canvas.Top="10">$</Label>
<Button Click="deletebuttonclick" Canvas.Top="12" Height="10"
Width="30" Canvas.Left="600"/>
</Canvas>
</DataTemplate>
</Canvas.Resources>
<ListBox ItemTemplate="{StaticResource tasktemplate1}"
x:Name="listBox" Height="700" Width="850"/>
....
</Canvas>
than wat关于创建的模板数量?它是否与xml文件中的任务数量完全相同?是的,因为我已绑定到ChildNodes集合,所以它将等于集合中的任务数量。在您提供的XML中,这将显示11个任务。我也使用代码隐藏方法进行了更新。看看这是否有帮助。创建一个列表并从该列表中删除项,然后分配回listBox的ItemsSource。或者,如果使用ObservableCollection
使用正确的绑定,只需从列表中删除项即可更新UI。(从列表中删除要从UI中删除的项目)。请帮助我回答我发布的问题
<Canvas Height="700" Width="850">
<Canvas.Resources>
<DataTemplate x:Key="tasktemplate1">
<Canvas Height="50" Width="850" Background="lightgray">
<Label Content="{Binding}" <-- HERE
Height="30" Width="170"
Canvas.Top="10" Canvas.Left="150"
Background="LightGray"/>
<TextBox Height="30" Width="60" Canvas.Top="10"
Canvas.Left="370"
Background="Black"/>
<Label Canvas.Left="500" Canvas.Top="10">$</Label>
<Button Click="deletebuttonclick" Canvas.Top="12" Height="10"
Width="30" Canvas.Left="600"/>
</Canvas>
</DataTemplate>
</Canvas.Resources>
<ListBox ItemTemplate="{StaticResource tasktemplate1}"
x:Name="listBox" Height="700" Width="850"/>
....
</Canvas>