2016-09-07 69 views
1

我不是新的C#與WPF編程,我從來沒有需要做到這一點,但現在我需要它,我卡住了一段時間了。我需要綁定一個枚舉,該枚舉附加了OnPropertyChanged方法,以在每次枚舉更改時生成一個轉換器。我已經得到了枚舉下面的代碼:綁定枚舉property屬性更改處理程序不提高轉換器

private WindowState windowstate; 
    public enum WindowState 
    { 
     INITIAL = 0, 
     LANGUAGE = 1, 
     SENSOR = 2, 
     PARAMETERS = 3, 
     LEGAL = 4, 
     PRIVACY = 5, 
     ABOUT = 6, 
     MANUAL = 7 
    } 
    public WindowState State 
    { 
     get { return windowstate; } 
     set { windowstate = value; OnPropertyChanged("State"); } 
    } 

而且在這裏我結合我有了這個枚舉的XAML:

Color="{Binding State, Converter={StaticResource ButtonMenuColor}, ConverterParameter=language, ElementName=userControl}" 

我想是要改變的顏色按鈕取決於枚舉的值。是否有可能使這種方式或WPF,出於某種原因,不支持這一點?

這是轉換器代碼:

class ButtonMenuColor : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     Lynx.Windows.Herramientas.WindowState state = (Lynx.Windows.Herramientas.WindowState)value; 
     string param = parameter as string; 

     if (state.ToString().ToLower() == param) 
      return Application.Current.FindResource("white") as SolidColorBrush; 

     return Application.Current.FindResource("buttonmenu_color") as SolidColorBrush; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+1

你能後的轉換代碼? –

+0

已添加轉換器代碼。 – kelirkenan

+0

您是否向轉換器添加了斷點以查看它是否被擊中或者您是否看不到顏色更改? –

回答

0

看來你是綁定到用戶控件,但你的財產是在視圖模型?

因此改變你的結合

Color="{Binding DataContext.State, Conv...}" 

所以你綁定到您的用戶控件的視圖模型的國家財產。如果狀態是你的userControl的DependencyProperty,那麼綁定應該起作用。

+0

我的屬性在UserControl中。這是我如何在xaml文件中聲明的: x:Name =「userControl」 – kelirkenan

+0

「color」屬性在用戶控件中?你是否將它設置爲依賴項屬性? –

+0

是的,我使用的按鈕的所有屬性都是依賴屬性 – kelirkenan

1

什麼進入我的頭是:

變化結合模式兩種方式。 add updateSourceTrigger = PropertyChanged,NotifySourceUpdated = True

嘗試檢查綁定的回退值是否正確。

也許您的控制負載在您的值設置之前。

,並把你的枚舉值作爲 {X:靜態命名空間:Class.WindowState +語言}