2017-05-05 76 views
1

我有一个组合框在WPF有4个静态值的变量:绑定WPF组合框的用户设置属性

<ComboBox 
     SelectedValue="{Binding Source={x:Static properties:Settings.Default}, 
           Path=KeyModifier, Mode=TwoWay}"> 
    <ComboBoxItem>Alt</ComboBoxItem> 
    <ComboBoxItem>Shift</ComboBoxItem> 
    <ComboBoxItem>Ctrl</ComboBoxItem> 
    <ComboBoxItem>Win</ComboBoxItem> 
</ComboBox> 

我想这个组合框的设定值与用户一个简单的字符串属性连接设置。这工作的一半:选定的值完全写入Settings.Default.KeyModifier ...但重新启动应用程序后,组合框的选定值未设置...尽管所有其他控件(编辑,复选框)绑定相同其他属性的方式设置正确。

使用绑定属性的值填充组合框有什么神秘吗?

或者我必须在启动时手动完成整个选择过程吗?

+0

@AlexPaven啊哈!错过了。删除评论以防止混淆。 – Will

回答

1

既然你不添加字符串,但ComboBoxItems你的组合框,你也必须设置其属性SelectedValuePath

<ComboBox SelectedValuePath="Content" 
      SelectedValue="{Binding Source={x:Static properties:Settings.Default}, 
            Path=KeyModifier, Mode=TwoWay}"> 
    <ComboBoxItem>Alt</ComboBoxItem> 
    <ComboBoxItem>Shift</ComboBoxItem> 
    <ComboBoxItem>Ctrl</ComboBoxItem> 
    <ComboBoxItem>Win</ComboBoxItem> 
</ComboBox> 

或者字符串添加到组合框,并使用SelectedItem代替SelectedValue

xmlns:sys="clr-namespace:System;assembly=mscorlib" 
... 
<ComboBox SelectedItem="{Binding Source={x:Static properties:Settings.Default}, 
           Path=KeyModifier, Mode=TwoWay}"> 
    <sys:String>Alt</sys:String> 
    <sys:String>Shift</sys:String> 
    <sys:String>Ctrl</sys:String> 
    <sys:String>Win</sys:String> 
</ComboBox> 

还要注意的是,由于WPF 4.5你可能会写这样的绑定:

SelectedItem="{Binding Path=(properties:Settings.Default).KeyModifier, Mode=TwoWay}" 
+0

SelectedValuePath使它成为:-) – Konrad

+1

更好的是只添加字符串而不是ComboBoxItems – Clemens

0

您在更改值后是否保存了设置? Settings.Default.Save()

+0

是...所选值出现在user.config中 – Konrad