1

像这样映射应用程序属性:

<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>

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

关于如何使绑定以两种方式使用设置的任何建议?

4

3 回答 3

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);
    }
于 2012-12-01T05:50:03.190 回答
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 中的工作方式与以前的版本不同。

于 2012-11-29T20:35:35.313 回答
1

您是否尝试将绑定的模式设置为双向?

<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">
于 2012-11-29T19:13:38.687 回答