我不知道这是否与您的问题有关,但目前 WPF 中的标准复选框存在一个错误 - 如果您绑定到 IsChecked 值,它只会在复选框被选中时触发,而不是在未选中时触发无论两种方式绑定等,这可能会导致一些意想不到的结果。我相信这将在 .Net v4 中得到解决,但我花了很多时间摸不着头脑。
无论如何,我以 Ben 的示例为例,并对其进行了更多扩展,它似乎与 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 的值。转换部分可以稍微整理一下……但这只是举例说明。