Я не знаю, связано ли это с вашей проблемой, но в настоящее время есть ошибка со стандартным флажком в WPF - когда вы связываетесь со значением IsChecked, оно срабатывает только тогда, когда флажок установлен, а не когда он не отмечен независимо от двусторонней привязки и т. д., что может привести к неожиданным результатам. Я верю, что это будет исправлено в .Net v4, но это стоило мне кучу времени, чтобы почесать голову.
Во всяком случае, я взял пример Бена и просто немного расширил его, и, похоже, он отлично работает с XElement. см. ниже ...
Я сделал конвертер класса
public class IntToBoolConverter : IValueConverter
{ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int intValue = System.Convert.ToInt32(value);
return (intValue != 0); //returns true for any non-zero value
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool) value == true)
return "1";
else
return "0";
}
}
Затем в XAML-месте окна с соответствующими ссылками на пространство имен
<Window.Resources>
<local:IntToBoolConverter x:Key="CheckBoxConv" />
</Window.Resources>
<Grid Name="myGrid">
<StackPanel>
<TextBox Text="{Binding XPath=@test1}" Height="30" Width="200"/>
<TextBox Text="{Binding XPath=@test2}" Height="30" Width="200"/>
<CheckBox IsChecked="{Binding XPath=@test2, Converter={StaticResource CheckBoxConv}}"/>
</StackPanel>
</Grid>
А затем, чтобы проверить это, поместите следующее в коде окна позади.
public partial class Window1 : Window
{
private XmlDocument xmlDoc;
private XmlElement xmlElemMux;
public Window1()
{
InitializeComponent();
xmlDoc = new XmlDocument();
xmlElemMux = xmlDoc.CreateElement("Hello");
xmlElemMux.SetAttribute("test1", "1");
xmlElemMux.SetAttribute("test2", "0");
myGrid.DataContext = xmlElemMux;
}
}
И, похоже, он правильно связывается и, соответственно, изменяет значение xmlElemMux, если я нажимаю флажок или изменяю текстовое поле. Часть преобразования может быть немного исправлена ... но это только иллюстрирует пример.