2011-11-25 5 views
1

나는 클릭 할 때 창이 열리는 메뉴 버튼이 있습니다.뭔가가 일어 났을 때 컨트롤 속성을 변경하십시오 - wpf xaml

클릭하면 색상이 변경되고 창이 닫히면 되돌릴 수 있습니다.

나는 그것을 클릭 할 때 색상을 바꾸기 위해 트리거를 사용한다고 생각했지만 색상을 변경하기 위해 창을 닫을 때 어떻게 알 수 있습니까?

난 당신이 윈도우가 열려 있는지 여부의 상태를 유지하는 몇 가지 부울에 바인딩의 IsChecked 속성을 사용하는 토글 버튼을 사용할 수 그래서 난

답변

2

보기 모델과 함께 사용되는 패턴 중 하나는 이벤트 수집기입니다. 기본적인 요점은 관심있는 객체가 두 객체 간의 직접적인 연결없이 다른 객체가 발생시킬 수있는 특정 이벤트를 구독 할 수있게하는 메시지 버스를 만드는 것입니다.

기본보기 모델은 WindowClosed 이벤트 (어떤 특정 창이 닫혔는지 결정하기위한 식별자 제공)에 가입 할 수 있습니다. 대화 상자가 닫히면 뷰 모델이 이벤트를 발생시킵니다.

뷰 모델이 이벤트를 받으면 메뉴 항목의 트리거가 바인딩되는 속성을 업데이트합니다.

0

뒤에 코드를 사용하지 선호 MVVM 방법으로 그것을 필요/마감했다. 당신은 당신의 창 폐쇄 이벤트를 구독 할 수 있습니다

+0

mvvm을 사용하는 경우 창을 닫으면 bool 속성을 업데이트 할 수 있습니다. – david

0

을하는 데 도움이 이벤트에서이처럼 어떤 부울 속성을 설정할 수 있습니다

희망 - 간단히

private void Border_MouseEnter(object sender, MouseEventArgs e) 
{ 
    Window w = new Window(); 
    w.Closed += new EventHandler(w_Closed); 
} 

void w_Closed(object sender, EventArgs e) 
{ 
    // Set your property here to true 
} 

, 당신은 그 속성을 재생할 수 있습니다 Trigger에서 메뉴 항목의 색상을 변경하십시오.

+0

탱크가 답을 찾았지만 xaml/mvvm 방식으로 검색했습니다. 질문을 업데이트합니다. – david

1

mvvm을 사용하는 경우 IWindowService를 사용하여 창을 열 수 있습니다. 그렇게하면 viewmodel은 서비스/창이 닫히고 boolean을 사용하여 트리거에 바인딩 할 수 있음을 알게됩니다.

1

인스턴스의 인스턴스이고 Button의 Command 속성에 바인딩 된 ViewModel 내에서 두 번째 창이 있다고 가정합니다. 일반적으로이 상황이 MVVM에서 처리되는 방법입니다. 이것에 의해, 윈도우가 열려 있는지 어떤지를 조회하는 ViewModel 내의 다른 property를 작성할 수 있습니다.

private Window _secondWindow = null; 
public bool SecondWindowIsOpen 
{ 
    get { return _secondWindow != null; } 
} 

는 그런 다음 XAML에서이 속성에 버튼의 backgroundColor로 결합하고 색상을 결정하기 위해 트리거를 사용할 수 있습니다. 윈도우가 열려있을 때
<Window.Resources> 
    <Style x:Key="WindowIsOpenButtonStyle" TargetType="{x:Type Button}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding SecondWindowIsOpen}" Value="True"> 
     <Setter Property="Background" Value="Green" />      
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</Window.Resources> 

<Grid> 
    <Button Background="Yellow" Command="{Binding OpenSecondWindow}" Style="{StaticResource WindowIsOpenButtonStyle}" /> 
</Grid> 

지금, 버튼의 배경 색상은 노란색으로 변경됩니다, 그리고 다시 닫힐 때 원래 색상의로 다시 복귀됩니다.

관련 문제