2013-03-27 5 views
0

Для моего wpfapplication я добавил файл настройки, который содержит цвета в качестве параметра:WPF Databinding COMBOBOX <-> Application-Настройки

MySetting.settings

Name  Type       Value 
myColor System.Windows.Media.Color #FFFFFF 

Так что мои автогенерируемый код выглядит следующим образом:

MySettings.Desinger.cs

[global::System.Configuration.UserScopedSettingAttribute()] 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    [global::System.Configuration.DefaultSettingValueAttribute("#FFFFFFFF")] 
    public global::System.Windows.Media.Color myColor { 
     get { 
      return ((global::System.Windows.Media.Color)(this["myColor"])); 
     } 
     set { 
      this["myColor"] = value; 
     } 
    } 

Это Валу e Я хочу установить в окне конфигурации. Это мой XAML код:

configWindow.xaml

<Window x:Class="myApp.configWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:properties="clr-namespace:myApp.Properties" 
    xmlns:converter="clr-namespace:myApp.Converter" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib"  
    Title="myApp" Height="557" Width="626"> 
<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> 
    <converter:myColorConverter x:Key="ColorConverter"/> 
    <properties:MySettings x:Key="config"/> 
    <ObjectDataProvider ObjectInstance="{x:Type Colors}" MethodName="GetProperties" x:Key="colorPropertiesOdp" /> 
</Window.Resources> 
<Grid Height="524" Width="615" DataContext="{StaticResource config}"> 
    <TabControl Height="508" HorizontalAlignment="Left" Name="tabControl1" VerticalAlignment="Top" Width="616" BorderThickness="0" Margin="1,11,0,0"> 
     <TabItem Header="options" Name="tabItemOptions"> 
      <Grid Height="484"> 
       <GroupBoxHeight="330" Margin="6,149,15,0" Name="groupBox2" > 
        <Grid Height="313"> 
         <ComboBox x:Name="comboBoxMyColor" Height="23" HorizontalAlignment="Left" Margin="302,34,0,0" VerticalAlignment="Top" Width="120" ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}" SelectedItem="{Binding Path=Default.myColor, Converter={StaticResource ColorConverter}, Mode=TwoWay}"> 
          <ComboBox.ItemTemplate> 
           <DataTemplate> 
            <StackPanel Orientation="Horizontal"> 
             <Label Background="{Binding Path=Name}" Content="{Binding Path=Name}" Height="{Binding ActualHeight, ElementName=comboBoxNotificationColor}" Width="{Binding ActualWidth, ElementName=comboBoxNotificationColor}"/> 
            </StackPanel> 
           </DataTemplate> 
          </ComboBox.ItemTemplate> 
         </ComboBox> 
        </Grid> 
       </GroupBox> 
      </Grid> 
     </TabItem> 
    </TabControl> 
</Grid> 

Но если я пытаюсь изменить цвет, я могу выбрать значение (например, «белый») на поле со списком, но конфигурация никогда не изменяется. Когда я установил точку останова на MySettings.Desinger.cs -> myCOlor -> set { ... }, она никогда не достигалась. Где моя вина?

+0

Каково 'ConvertBack' называют в вашей colorConverter? – Blachshma

+0

Да, конвертировать и конвертировать называется – Kooki

ответ

1

Вам не хватает INotifyPropertyChanged, на мой взгляд.

Без этого ваша модель или viewmodel не могут уведомить вас, когда вы что-то измените с ui.

Информация об этом здесь: WPF-INotifyPropertyChanged

+0

Неужели мне это нужно? Причина для других элементов управления, таких как ползунок или флажок, работает ... – Kooki

Смежные вопросы