2

先週、いくつかのオプションを検索して試してみましたが、探しているものが見つからないようです。ここの誰かが助けてくれるかもしれません。これを読んでいる間、私は MVVM をできるだけ厳密に利用しようとしていることに注意してください。ただし、私は WPF に比較的慣れていません。ちなみに、私は Mahapps.Metro を使用してウィンドウとコントロールのスタイルを設定しています

アプリケーションが構成に使用する XML ファイルがあります (アプリケーションをユーザーのシステムにインストールできないため、app.config ファイルを使用できません)。アプリケーションは起動時にこのファイルを探し、見つからない場合は作成します。以下は、XML のスニペットです。

<?xml version="1.0" encoding="utf-8"?>
<prefRoot>
  <tabReport>
    <cbCritical>True</cbCritical>
  </tabReport>
</prefRoot>

で XML ファイルを参照しますWindow.Resources

<Controls:MetroWindow.Resources>
        <XmlDataProvider x:Key="XmlConfig"
                         Source="%appdata%\Vulnerator\Vulnerator_Config.xml"
                         XPath="prefRoot"
                         IsAsynchronous="False"
                         IsInitialLoadEnabled="True"/>
</Controls:MetroWindow.Resources>

そして、これDataContextを私のものとして利用しますMainWindow:

<Controls:MetroWindow DataContext="{DynamicResource XmlConfig}">

次に、「string-to-bool」コンバーターをセットアップします。

class StringToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null)
        {
            bool? isChecked = (bool?)value;
            return isChecked;
        }
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null)
        {
            string isChecked = value.ToString();
            return isChecked;
        }
        return string.Empty;
    }
}

IsChecked最後に、適切なにバインドしますXPath

<Checkbox x:Name="cbCritical"
          Content="Critical"
          IsChecked="{Binding XPath=//tabReport/cbCritical, 
                      Converter={StaticResource StringToBool}}" />

このすべての後、アプリケーションはロードされますが、IsChecked設定されていfalseます... ありとあらゆるアイデアがここで役に立ちます。前もって感謝します!

4

1 に答える 1