0

作成中のアドインでさまざまなカテゴリを管理するために XML ファイルを使用する必要があるという問題に遭遇しました。これは次の 2 つの部分で構成されています。

  1. 最初にすべてのカテゴリをロードし、メソッドを使用してそれらを Outlook に追加します。

    AddCategory(文字列名、文字列の色、文字列のショートカット)

  2. アプリケーション内からカテゴリを管理できる。

AddCategory がハードコーディングされている限り、かなりうまく機能するようになりました。XML の使用に移行して以来、あまり扱っていません。カテゴリ管理セクションを理解できれば、これでうまくいくと思いました。そのため、以下にコードの 3 つのセクションを掲載しました。HierarchicalDataTemplate を使用して XML を表示しようとする表示用の WPF (メールボックスのリストまでしか取得しません) と、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>
4

1 に答える 1

1

XmlDataProvider は双方向バインディングをサポートしていません。一部のデータを公開したい場合にのみ役立ちますが、実際にはそれらを操作する必要がある場合には役立ちません。

たとえば、カスタム保存ファイルではなく xml を本当に使用する必要がある場合は、変更を手動で xml ファイルに保存する方法を説明するリンクを参照してください: http://www.codeproject.com/Articles/26875/WPF- XmlDataProvider-Two-Way-Data-Binding

于 2013-05-02T07:44:20.343 に答える