我有一个WPF应用程序,它读取XML文件并创建
XDocument
绑定到,通过DataContext等将其各种元素传递给其他UI元素。此应用程序读取的XML模式将元素上的一些属性标记为完全可选的。
“中概述了我用于绑定的方法”
How to: Bind to XDocument, XElement, or LINQ for XML Query Results
DataContext
XDocument newDoc = new XDocument(new XElement("mydoc"));
gridMain.DataContext = newDoc.Root;
元素的实例与文档一起作为
ItemsSource
为了一个
ListBox
<ListBox ItemsSource="{Binding Elements[item]}">
<!-- ... -->
</ListBox>
然后,这个
DataTemplate
对于列表框中的项目,有图标和
ToggleButton
其状态由布尔值定义
relevant
<item>
元素。我写了我自己的习惯
IValueConverter
类来处理XML布尔字符串之间的转换,以及
System.Windows.Visibility
和
bool
值。。。
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel LastChildFill="True">
<Grid Visibility="{Binding Attribute[relevant].Value, Converter={StaticResource BooleanToVisibilityConverter}}" Margin="2 0">
<StaticResource ResourceKey="RelevantIcon"/>
</Grid>
<Grid Visibility="{Binding Attribute[relevant].Value, Converter={StaticResource NegatedBooleanToVisibilityConverter}}" Margin="2 0">
<StaticResource ResourceKey="IrrelevantIcon"/>
</Grid>
<ToggleButton IsChecked="{Binding Attribute[relevant].Value, Converter={StaticResource BooleanConverter}}" VerticalAlignment="Center" Margin="2 0" Padding="5">Relevant</ToggleButton>
<TextBox Text="{Binding Value}" TextWrapping="Wrap" AcceptsReturn="True" AllowDrop="True" Margin="2 0"/>
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<项目>
相关的
属性定义后,这将按预期工作。但是,模式定义了
可能存在也可能不存在。因此,当我在缺少这些属性的文档中创建一个元素或加载时,列表项视图会完全中断。两个图标都出现了,切换按钮似乎什么也不做。断点显示我的习惯
IValueConverter公司
从不为这些元素调用,这表示绑定由于
Attribute[relevant]
null
,和
无效的
没有财产,更别说了
Value
.
我试过用
FallbackValue
Binding
没有任何效果,并且空条件运算符在绑定中不起作用-XAML解析器将在运行时出现异常。