Это мой XAML пример кода:Изменение атрибута XML в Datasource через ComboBox TwoWay Связывание
<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>
Код выше отображает методы контакты как выпадающий список , ContactMethod, который имеет XML Selected Attribute, установленный в true, предварительно выбран в выпадающем списке и отображается при запуске.
Это выглядит следующим образом:
Я использую следующий метод для сохранения данных:
private void OnSubmitClick(object sender, System.EventArgs eventArgs)
{
DataProvider.Document.Save("datacontext.xml");
}
Этот метод изменяет значение ContactMethod и не выбранный атрибут.
При выборе Mobile
и нажмите кнопку [отправить] результат выглядит следующим образом:
<ContactMethods>
<ContactMethod Selected="False">Phone</ContactMethod>
<ContactMethod Selected="False">Email</ContactMethod>
<ContactMethod Selected="True">Mobile</ContactMethod>
<ContactMethod Selected="False">Mobile</ContactMethod>
</ContactMethods>
Это изменение сохраняется где Selected
атрибут равен действительности. Значение, на которое был связан элемент управления, перезаписывается.
Желаемый результат: он должен выглядеть следующим образом:
<ContactMethods>
<ContactMethod Selected="False">Phone</ContactMethod>
<ContactMethod Selected="False">Email</ContactMethod>
<ContactMethod Selected="False">Letter</ContactMethod>
<ContactMethod Selected="True">Mobile</ContactMethod>
</ContactMethods>
Вопрос: Как изменить выбранный атрибут выбранного в данный момент элемента? Можно ли сохранить изменения, сделанные с помощью желаемой структуры данных xml?
Да, я знаю, что будет легко. К сожалению, я должен использовать данный источник данных. Я не могу влиять на структуру данных. – Joel
Проверьте мою другую альтернативу, просто изменив ответ –
. Я бы предпочел решение с меньшим количеством кода, потому что весь XAML/CodeBehind должен генерироваться автоматически во время выполнения. Я подожду несколько дней, чтобы увидеть, есть ли другие способы, если я не буду отмечать ваше сообщение как ответ. – Joel