我遇到了一个问题,我需要使用 XML 文件来管理我正在创建的插件中的各种类别。它由两部分组成:
在开始时加载所有类别并使用一种方法将它们添加到 Outlook 中:
AddCategory(字符串名称、字符串颜色、字符串快捷方式)
能够从应用程序中管理类别。
只要 AddCategory 是硬编码的,我就可以很好地工作。自从我开始使用 XML 以来,并没有真正处理过它。我想如果我能弄清楚类别管理部分,这就会到位。所以下面我发布了三段代码,用于显示的 WPF 使用 HierarchicalDataTemplate 来尝试显示 XML(仅列出邮箱)和 XML 文件本身。在我看来,我应该使用双向绑定,以便可以从管理界面添加和删除部分 XML 文件。本质上,我迷失在编写此设置的最佳方法中。我需要能够轻松访问各种类别,因为它们很容易应用于邮箱。任何帮助或方向将不胜感激。我' 在这里查看了与 HDT、XML 和 WPF 有关的所有其他各种问题,但还没有进一步了解。我的 LINQfu 很弱,我的绑定知识也很弱。
WPF 代码
<Grid Name="mainGrid">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="30"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<XmlDataProvider x:Key="CategoriesData" Source="Categories.xml" XPath="MailBoxes"/>
<!--Template for Rule-->
<HierarchicalDataTemplate x:Key="ruleHDT"
ItemsSource="{Binding XPath=@Rules/Rule}">
<TextBlock Text="{Binding XPath=@Action}" />
</HierarchicalDataTemplate>
<!--Template for Category-->
<HierarchicalDataTemplate x:Key="categoryHDT"
ItemTemplate="{StaticResource ruleHDT}"
ItemsSource="{Binding XPath=@Categories/Category}">
<TextBlock Text="{Binding XPath=@Name}" />
</HierarchicalDataTemplate>
<!--Template for MailBox-->
<HierarchicalDataTemplate x:Key="mailboxHDT"
ItemTemplate="{StaticResource categoryHDT}"
ItemsSource="{Binding XPath=@MailBoxes/MailBox}">
<TextBlock Text="{Binding XPath=@Name}" />
</HierarchicalDataTemplate>
</Grid.Resources>
<TreeView Grid.Column="0" Grid.Row="0" Margin="5" ItemsSource="{Binding Source={StaticResource CategoriesData}, XPath=MailBox}"
ItemTemplate="{StaticResource mailboxHDT}"/>
<StackPanel Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" Height="100" Margin="5" VerticalAlignment="Top">
<Button Content="Add" Margin="5"/>
<Button Content="Remove" Margin="5" Width="80"/>
</StackPanel>
<StackPanel Grid.Column="0" Grid.Row="1" Margin="5" Orientation="Horizontal" VerticalAlignment="Center">
<RadioButton Content="All MailBoxes" GroupName="MailBoxXMLView" Margin="0,0,5,0" />
<RadioButton Content="Accessible MailBoxes" GroupName="MailBoxXMLView" Margin="5,0,0,0" IsChecked="True"/>
</StackPanel>
<StackPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2" Orientation="Horizontal" Margin="5" VerticalAlignment="Center">
<Button Content="Import" Margin="0,0,5,0" Width="80"/>
<Button Content="Export" Width="80"/>
</StackPanel>
</Grid>
XML 文件
<?xml version="1.0" encoding="utf-8" ?>
<MailBoxes>
<MailBox Name="MB01">
<Categories>
<Category Name="Clean">
<Color>olCategoryColorGreen</Color>
<Shortcut>olCategoryShortcutKeyCtrlF3</Shortcut>
<Rules>
<Rule Action="Only">Clean</Rule>
</Rules>
</Category>
<Category Name="Spam">
<Color>olCategoryColorYellow</Color>
<Shortcut>olCategoryShortcutKeyCtrlF4</Shortcut>
<Rules>
<Rule Action="Remove">Clean</Rule>
</Rules>
</Category>
</Categories>
</MailBox>
<MailBox Name="MBTest01">
<Categories>
<Category Name="Cat01">
<Color>olCategoryColorRed</Color>
<Shortcut>olCategoryShortcutKeyNone</Shortcut>
<Rules>
</Rules>
</Category>
<Category Name="Cat02">
<Color>olCategoryColorYellow</Color>
<Shortcut>olCategoryShortcutKeyNone</Shortcut>
<Rules>
</Rules>
</Category>
</Categories>
</MailBox>
</MailBoxes>