我是WPF的新手,XML数据绑定让我很困惑,所以如果我不知道我在说什么,请耐心等待。
我尝试做一个XML绑定的列表框,具有双向绑定。我能够将列表框绑定到XML文档并编辑项目。但我很难添加或删除项目。我只是想删除单选项目,或通过UI提示添加新项目。
XAML:
<Window.Resources>
<DataTemplate x:Key="QuickDataTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding XPath=Title}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<ui:TextBox x:Name="ListTextBox" Grid.Column="1" Text="{Binding XPath=Value}" IsEnabled="False" Foreground="Black" Opacity="100" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.DataContext>
<XmlDataProvider x:Name="QuickData" Source="QuickData.xml" XPath="List/Item" />
</Grid.DataContext>
...
<ListBox Width="200" Height="140" Name="QuickDataList" HorizontalContentAlignment="Stretch" IsSynchronizedWithCurrentItem="True"
Visibility="Visible" ItemsSource="{Binding}" ItemTemplate="{StaticResource QuickDataTemplate}">
</ListBox>
</Grid>
字符串
C# Code Behind:
string QuickDataPath = path + "QuickData.xml";
QuickData.Source = new Uri(QuickDataPath);
private void ListEdit_Click(object sender, RoutedEventArgs e)
{
P_EditQuickData.Visibility = Visibility.Visible;
ListSave.Visibility = Visibility.Visible;
}
private void ListDelete_Click(object sender, RoutedEventArgs e)
{
QuickDataList.Items.RemoveAt
(QuickDataList.Items.IndexOf(QuickDataList.SelectedItem));
ListSave.Visibility = Visibility.Visible;
}
private void ListSave_Click(object sender, RoutedEventArgs e)
{
ListSave.Visibility = Visibility.Collapsed;
string source = QuickData.Source.LocalPath;
QuickData.Document.Save(source);
}
型
XML文档:
<?xml version="1.0" encoding="utf-8"?>
<List xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Item>
<Title>Holes</Title>
<Value>29</Value>
</Item>
<Item>
<Title>Holes</Title>
<Value>28</Value>
</Item>
<Item>
<Title>Holes</Title>
<Value>14</Value>
</Item>
</List>
型
我可以轻松地编辑项目,但当我尝试通过“QuickDataList.Items. RemoveAt”删除或添加项目时,会出现此错误:
System.InvalidOperationException:“在使用ItemsSource时,操作无效。请改用ItemsControl.ItemsSource访问和修改元素。”
我引用了this的文章,但我就是无法理解它。
我想我可以格式化/加载xml文档,选择正确的项,然后删除/添加子项并重新序列化,但与简单地绑定xml并编辑它相比,这似乎是过多的代码。
我很感激任何反馈。
1条答案
按热度按时间daupos2t1#
错误告诉您的是,当控件绑定到ItemsSource时,您无法修改Items集合。您需要直接修改源,在本例中,您使用的是URI,因此您必须修改Xml文件并刷新XmlDataProvider。
或者,您可以将Xml文件作为XmlDocument加载,并将其绑定到数据提供程序(通过
Document
属性,而不是Source
)。