2012-11-29 20 views
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> 

問題在於它只能在一個方向上工作,從設置到ComboBox,但組合中的任何選擇都不會回到設置。 當我在模型中使用字體大小的常規屬性時,一切似乎都正常工作...

有關如何使綁定以雙向設置工作的任何建議?

+0

你看過這個嗎? http://weblogs.asp.net/thomaslebrun/archive/2009/03/26/wpf-how-to-bind-a-control-to-a-property-defined-in-the-settings.aspx –

+0

該文章指的是使用列表框...我的問題是關於組合框... 我可以成功地使一個TextBox工作的設置,但不是ComboBox ... 感謝您查看它雖然。 – Califf

+0

是的,在閱讀你的答案後,我沒有意識到它是控制特定的。 –

回答

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"> 
+0

是的,沒有區別...另外我認爲這是默認值模式 – Califf

+0

也許UpdateSourceTrigger,然後。請參閱http://stackoverflow.com/questions/1187294/wpf-combobox-update-source-question和http:// stackoverflow。com/questions/4770912/how-to-use-update-source-trigger-on-wpf-combobox-which-is-editable –

+0

不幸的是,UpdateSourceTrigger = PropertyChanged也沒有幫助... 雖然這很好用: 這個問題很明顯似乎與組合框... – Califf

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

醜,但工程..希望能有更好的解決方案c青梅起來......

這篇文章提供了更深入地瞭解這個問題像它看起來:LINK

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

+0

鏈接應與此無關,您不綁定到靜態屬性。 –

+0

Source = {StaticResource Settings} <<< ---表示它的靜態,不是? – Califf

+0

這不是一個屬性,它是源對象,'StaticResource'也沒有任何關係[靜態'通常意味着什麼](http://msdn.microsoft.com/zh-cn/library/98f28cdx)。 ASPX)。 –

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); 
    } 
+0

好的解決方案。感謝您分享,它真的有用! – Califf