2016-09-07 8 views
1

저는 WPF로 C# 프로그래밍을 처음 접했을뿐만 아니라 지금은 필요하지 않지만 지금은 필요합니다. Enum이 변경 될 때마다 변환기를 발생시키는 OnPropertyChanged 메서드를 첨부 한 열거 형을 바인딩해야합니다.propertychanged 처리기로 enum을 바인딩하지 않고 바인딩합니다.

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

이 보인다는 사용자 정의 컨트롤에 바인딩하지만 속성은 뷰 모델에?

그래서 당신은 그래서 당신은 당신의 UserControl의 뷰 모델의 주 속성에 바인딩

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

결합을 변경합니다. State가 userControl의 DependencyProperty 인 경우 바인딩이 작동해야합니다. 내 머리에 와서 무엇을

+0

내 속성이 UserControl에 있습니다. 이것은 xaml 파일에 선언 된 것입니다. x : Name = "userControl" – kelirkenan

+0

"color"속성이 사용자 정의 컨트롤에 있습니까? 종속성 속성으로 설정 했습니까? –

+0

예, 사용중인 버튼의 모든 속성이 종속성 속성입니다. – kelirkenan

1

은 다음과 같습니다

변화는 두 가지 방법으로 모드를 결합. updateSourceTrigger = PropertyChanged, NotifySourceUpdated = True를 추가하십시오.

바인딩이 올바른지 확인하십시오.

값이 설정되기 전에 컨트롤이로드 될 수 있습니다.

및 로 열거 값을 넣어 {X : 정적 네임 스페이스 : Class.WindowState + 언어를}