将组合框选定值绑定到应用程序设置

时间:2012-11-29 19:00:04

标签: wpf data-binding properties combobox application-settings

将应用程序属性映射为:

<Application.Resources>
    <properties:Settings x:Key="Settings" />
</Application.Resources>

目标是将字体大小设置 MainWindowFontSize (int)绑定到组合框上的选定值:

<ComboBox 
  SelectedValuePath="Content"
  SelectedValue="{Binding Default.MainWindowFontSize, Source={StaticResource Settings}}">
<ComboBoxItem>8</ComboBoxItem>
...
<ComboBoxItem>48</ComboBoxItem>
</ComboBox>

这个问题是它只能在一个方向上工作,从设置到ComboBox,但组合中的任何选择都不会回到设置。 当我在模型中使用常规属性作为字体大小时,一切似乎都能正常工作......

有关如何使绑定与双向设置一起使用的任何建议吗?

3 个答案:

答案 0 :(得分:2)

它似乎是.NET 4.5中的新功能。我发现虽然如果你在后面的代码中创建绑定它工作得很好。像这样:

    public MainWindow()
    {
        InitializeComponent();
        var binding = new Binding("Delay");
        binding.Source = Settings.Default;
        binding.Mode = BindingMode.TwoWay;
        BindingOperations.SetBinding(this.Combo, ComboBox.SelectedValueProperty, binding);
    }

答案 1 :(得分:1)

您是否尝试过将绑定模式设置为TwoWay?

<ComboBox 
  SelectedValuePath="Content"
  SelectedValue="{Binding Default.MainWindowFontSize, Source={StaticResource Settings}, Mode=TwoWay}">

您也可以尝试使用UpdateSourceTrigger:

 <ComboBox 
  SelectedValuePath="Content"
  SelectedValue="{Binding Default.MainWindowFontSize, Source={StaticResource Settings}, Mode=TwoWay}, UpdateSourceTrigger=PropertyChanged">

答案 2 :(得分:1)

找到了这个解决方法:

<ComboBox ...  SelectionChanged="MainWndFontSizeSelectionChanged" ...>

事件处理程序:

private void MainWndFontSizeSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var cb = (ComboBox)sender;
    int newSize = 0;
    if (Int32.TryParse(cb.SelectedValue.ToString(), out newSize) == true)
    {
        WpfApplication1.Properties.Settings.Default.MainWindowFontSize = newSize;
    }
}

丑陋,但有效......希望有更好的解决方案......

这篇文章提供了对问题的更深入了解:LINK

它在.NET4.5中的工作方式与以前的版本不同。