这是我的 XAML 示例代码:
<Grid>
<Grid.DataContext>
<XmlDataProvider x:Name="DataProvider" Source="datacontext.xml" XPath="/" />
</Grid.DataContext>
<ComboBox Name="combobox1" Width="100" Height="25" ItemsSource="{Binding XPath=Contact/ContactMethods//*}">
<ComboBox.SelectedValue>
<Binding XPath="Contact\ContactMethods/*[@Selected='True']" NotifyOnSourceUpdated="True" NotifyOnTargetUpdated="True" />
</ComboBox.SelectedValue>
</ComboBox>
</Grid>
这是我的 XML 数据源:
<Contact ShowsInterest="true">
<Name>John</Name>
<Lastname>Doe</Lastname>
<ContactMethods>
<ContactMethod Selected="False">Phone</ContactMethod>
<ContactMethod Selected="False">Email</ContactMethod>
<ContactMethod Selected="True">Letter</ContactMethod>
<ContactMethod Selected="False">Mobile</ContactMethod>
</ContactMethods>
</Contact>
上面的代码将联系人方法显示为组合框。将 XML Selected Attribute 设置为 true 的 ContactMethod 在组合框中预选并在启动时显示。
它看起来像这样:
我使用以下方法保存数据:
private void OnSubmitClick(object sender, System.EventArgs eventArgs)
{
DataProvider.Document.Save("datacontext.xml");
}
此方法更改 ContactMethod 的值,而不是 Selected 属性。
如果您选择Mobile
并单击 [提交],结果如下所示:
<ContactMethods>
<ContactMethod Selected="False">Phone</ContactMethod>
<ContactMethod Selected="False">Email</ContactMethod>
<ContactMethod Selected="True">Mobile</ContactMethod>
<ContactMethod Selected="False">Mobile</ContactMethod>
</ContactMethods>
Selected
在Attribute 等于 true的情况下,更改将保持不变。控件绑定的值被覆盖。
期望的结果:它应该是这样的:
<ContactMethods>
<ContactMethod Selected="False">Phone</ContactMethod>
<ContactMethod Selected="False">Email</ContactMethod>
<ContactMethod Selected="False">Letter</ContactMethod>
<ContactMethod Selected="True">Mobile</ContactMethod>
</ContactMethods>
问题: 如何更改当前选中项的选中属性?是否可以保留使用所需的 xml 数据结构所做的更改?