将应用程序属性映射为:
<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,但组合中的任何选择都不会回到设置。 当我在模型中使用常规属性作为字体大小时,一切似乎都能正常工作......
有关如何使绑定与双向设置一起使用的任何建议吗?
答案 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中的工作方式与以前的版本不同。