在上週搜索並嘗試了幾個選項之後,我似乎無法找到我在找的內容;也許這裏有人可以幫忙。在閱讀這篇文章時,請記住,我儘可能嚴格地使用MVVM,儘管我對WPF比較陌生。作爲一個方面說明,我使用Mahapps.Metro來設置我的窗口和控件,發現here。通過XmlDataProvider(利用MVVM)綁定複選框「IsChecked」值到外部XML文件
我有一個XML文件,我的應用程序用於配置(我無法使用app.config文件,因爲應用程序無法安裝在用戶的系統上)。應用程序將在啓動時查找此文件,如果找不到該文件,它將創建它。下面是XML的一個片段:
<?xml version="1.0" encoding="utf-8"?>
<prefRoot>
<tabReport>
<cbCritical>True</cbCritical>
</tabReport>
</prefRoot>
我引用我Window.Resources
XML文件:
<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}">
接下來,我建立了一個「字符轉換器」轉換器:
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}}" />
這一切後,applciation加載,但IsChecked
設置爲false
...任何和所有的想法都將是有益的在這裏;提前致謝!