XAML 如何在WPF中添加/删除XML数据绑定列表框中的项目?

rjzwgtxy  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(110)

我是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并编辑它相比,这似乎是过多的代码。
我很感激任何反馈。

daupos2t

daupos2t1#

错误告诉您的是,当控件绑定到ItemsSource时,您无法修改Items集合。您需要直接修改源,在本例中,您使用的是URI,因此您必须修改Xml文件并刷新XmlDataProvider。
或者,您可以将Xml文件作为XmlDocument加载,并将其绑定到数据提供程序(通过Document属性,而不是Source)。

相关问题