Coucou, J'ai Trouvé N решение для проблемы (в том числе, марш для меня)!Dit moi si ça marche pour toi aussi, mais y'a pas de raison ^^.
Par contre, je ne suis pas sure d'avoir bien, включает в себя изменения и изменения в действииframework 3.5, danc lequel, marchait bien, et le 4.0 ...
Вот решение для этого кода, работающего с framework 4.0 (я попытался адаптировать его к вашему примеру, но яЯ не уверен. Во всяком случае, это идея):
Измените свой ListItem
элемент управления следующим образом:
<ListBox DataContext="{Binding UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged}"
IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel LastChildFill="True">
<!-- Add this collapsed textbox -->
<TextBox Visibility="Collapsed" DataContext="{Binding Path=Element[combobox]}" Text="{Binding Path=Text, ElementName=cbxComboBox, UpdateSourceTrigger=PropertyChanged}" TextChanged="TextBox_TextChanged" />
<!-- Name the Combobox -->
<ComboBox Name="cbxComboBox" MinWidth="75" IsEditable="True"
IsReadOnly="False" DockPanel.Dock="Left"
DataContext="{Binding Path=Element[combobox]}"
IsSynchronizedWithCurrentItem="False"
ItemsSource="{Binding Path=Elements[option], UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Attribute[value].Value"
Text="{Binding Path=Attribute[option].Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
/>
<TextBox MinWidth="150" AcceptsReturn="False"
AcceptsTab="False" TextWrapping="NoWrap"
Text="{Binding Path=Attribute[obs].Value, UpdateSourceTrigger=PropertyChanged}" />
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
И ваш новый код:
XDocument xdXml;
public MyWindow()
{
xdXml = XDocument.Load(@"C:\file.xml");
InitializeComponent();
DataContext = xdXml;
xdXml.Changed += new EventHandler<XObjectChangeEventArgs>(XdXml_Changed);
}
private void XdXml_Changed(object sender, XObjectChangeEventArgs e)
{
xdXml.Save(@"C:\fichier.xml");
}
// finally, add this event:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (((XElement)((FrameworkElement)sender).DataContext).Attribute("option").Value != ((TextBox)sender).Text)
{
((XElement)((FrameworkElement)sender).DataContext).Attribute("option").Value = ((TextBox)sender).Text;
}
}
Для понимания взгляните на:
J'espère vraiment que ça marchera pour toi aussi, n'hésite pas à me demander si besoins!