2010-12-31 6 views
2

NavigationWindow을 사용합니다. 첫 번째 화면에서 사용자는 radio button을 선택하고 다음 화면 옆에 있습니다.새내기 wpf 디자인 질문

다음 화면에서 radio button을 선택하면 모든 관련 사진을 넣고 모든 버튼에 관련 기능을 제공해야합니다.

올바른 방법은 무엇입니까?

winforms에서 저는 라디오 버튼 값을 다음 화면 계약자에게 전달하고 else 명령문을 통해 계약자와 이벤트 기능의 모든 것을 처리합니다.

데이터 바인딩에 대해 이미 배웠습니다.

당신은 내가이 일을 ....

+1

워커 : 하이/감사/I가 귀하의 질문에 noob'입니다'퍼팅 피 바운드 라디오 버튼을 구현하는 방법은 예를 들어, 자신의 그룹에 각각 1 점을 추가하는 듯하여보기 모델의 토글을 처리하는 것입니다 . 응답이나 응답자에는 영향을주지 않습니다. – decyclone

답변

1

올바른 접근 방식은 정말 문제의 복잡성에 따라 달라을 구현하는 방법을 단계별로 설명 할 수있다. 가장 간단한 방법은 응용 프로그램 시작시 뷰 모델 객체를 만들어 응용 프로그램의 리소스 사전에 넣은 다음 모든 Page의 생성자에 해당 객체를 DataContext으로 설정하는 것입니다. 그런 다음 페이지의 컨트롤을이 개체의 속성에 바인딩 할 수 있습니다.이 속성은 본질적으로 전체 페이지 집합의 데이터 컨텍스트입니다.

예를 들어 1 페이지에서 뷰 모델의 부울 속성 집합에 바인딩 된 라디오 단추 집합을 가질 수 있습니다. 2 페이지의 컨트롤이 이러한 속성의 설정에 따라 정보를 표시 스타일을 지정할 수 있습니다 예 :

<DockPanel Visibility="Collapsed"> 
    <DockPanel.Style> 
     <Style TargetType="DockPanel"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding BooleanProperty1}" Value="True"> 
       <Setter Property="Visibility" Value="Visible"/> 
      </DataTrigger> 
     </Style.Triggers> 
     </Style> 
    </DockPanel.Style> 
    <!-- controls that should appear if BooleanProperty1 is True go here --> 
</DockPanel> 

이 아니라 다중 마법사의 비교적 간단한 경우에는 작동하지 않습니다 시나리오 많이 있습니다, 그것은 당신이 원하는 것일 수 있습니다.

라디오 버튼에 대한 바인딩이 엉성한 디자인 문제가 있습니다. 그룹의 세 개의 라디오 버튼의 IsChecked 속성을 세 개의 부울 속성에 바인딩 한 다음 각 버튼을 클릭하면 소스의 바인딩 된 값이 모두 True로 설정됩니다. 이는 그룹의 라디오 버튼이 선택되면 그룹의 다른 버튼에서 IsChecked 값을 명시 적으로 지우고 바인딩을 중단하기 때문에 발생합니다. 여기에는 좋은 이유가 있습니다. 그러나 그 이유를 모르는 경우에는 많은 시간을 할애 할 수 있습니다.

<RadioButton Group="BooleanProperty1" IsChecked="{Binding BooleanProperty1, Mode=TwoWay}"/> 
<RadioButton Group="BooleanProperty2" IsChecked="{Binding BooleanProperty2, Mode=TwoWay}"/> 
<RadioButton Group="BooleanProperty3" IsChecked="{Binding BooleanProperty3, Mode=TwoWay}"/> 

public bool BooleanProperty1 
{ 
    set 
    { 
     if (value != _BooleanProperty1) 
     { 
     _BooleanProperty1 = value; 
     if (value) 
     { 
      BooleanProperty2 = false; 
      BooleanProperty3 = false; 
     } 
     OnPropertyChanged("BooleanProperty1"); 
     } 
    } 
}