올바른 접근 방식은 정말 문제의 복잡성에 따라 달라을 구현하는 방법을 단계별로 설명 할 수있다. 가장 간단한 방법은 응용 프로그램 시작시 뷰 모델 객체를 만들어 응용 프로그램의 리소스 사전에 넣은 다음 모든 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");
}
}
}
워커 : 하이/감사/I가 귀하의 질문에 noob'입니다'퍼팅 피 바운드 라디오 버튼을 구현하는 방법은 예를 들어, 자신의 그룹에 각각 1 점을 추가하는 듯하여보기 모델의 토글을 처리하는 것입니다 . 응답이나 응답자에는 영향을주지 않습니다. – decyclone