先週、いくつかのオプションを検索して試してみましたが、探しているものが見つからないようです。ここの誰かが助けてくれるかもしれません。これを読んでいる間、私は 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
ます... ありとあらゆるアイデアがここで役に立ちます。前もって感謝します!