2014-04-28 2 views
0

확인란을 기반으로 두 DataContext와 바인딩해야하는 UserControl이 있습니다.부울 조건에 DataContext 바인딩

이 UserControl은 응용 프로그램 (전역) 또는 선택한 DataGridRow에 대한 데이터를 표시해야합니다.

class Person 
{ 
    public string Name {get; set;} 
    public string Age {get; set;} 
} 

UserControl에는 이름과 나이를 표시하는 텍스트 필드가 두 개 있습니다. 만약 "Global"체크 박스가 체크되어 있다면,이 UserControl을 MainViewModel의 APerson (Person 클래스의) 속성으로 바인드하고 싶습니다. 체크하지 않으면 DataGrid에있는 SelectedItem의 UserControl을 바인드해야합니다. SelectedItem 또한 Person 유형

답변

0

입니다. 기본적으로 ViewModel을 사용하여 원하는 것을 얻을 수 있습니다. 이를 수행하는 한 가지 방법이 있습니다.

Checkbox.IsChecked을 ViewModel의 'IsGlobal'속성에 바인딩 할 것입니다. 그러면 userControl을 다른 속성, 예를 들어 SomePerson의 ViewModel에 바인딩 할 수 있습니다. 마지막으로 setterIsGlobal 인 경우 부울 상태 인 IsGlobal에 따라 SomePerson을 데이터 격자의 APerson 또는 SelectedItem으로 변경합니다.

+0

XAML로만 수행 할 수 있습니까? 어떤 가능성? – UsmanAzam

+0

수 있습니다. 그러나보기에 중복 된 사용자 정의 컨트롤을 추가하고 해당 가시성을 IsGlobal에 바인딩 한 다음 boolToVisibility 변환기를 사용하여 필요한 항목 만 표시해야합니다. – bit

0

[순수하게 XAML로 작업하기를 원하기 때문에 여기에 추가하십시오. 순수한 XAML을 고집하는 것은 필수적인 것은 아니지만 @ bit의 대답은 올바른 방법 인 것 같습니다.]

스타일을 사용하여 변경 작업을 수행 할 수 있습니다.

사용자의 UC가 MyUC이고 현재 다른보기/UC/창에서 <local:MyUC/>과 비슷한 인스턴스가 있다고 가정 해 봅시다. 내가 여기에 데이터 컨텍스트 속성을 변경하고있어

<local:MyUC> 
    <local:MyUC.Style> 
     <Style TargetType="{x:Type local:MyUC}"> 
      <Setter Property="DataContext" Value="{Binding SelectedItem, ElementName=MyDataGrid}"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=MyCheckbox, Path=IsChecked}" 
          Value="True"> 
        <Setter Property="DataContext" Value="{Binding APerson}"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </local:MyUC.Style> 
</local:MyUC> 

,하지만 당신은 MyUC에 다른 종속성 속성을 변경할 수 있습니다 : 당신은 너무처럼 보이도록 인스턴스를 변경할 수 있습니다.

다시 말하지만,이 기능을 다루기에는 덜 익숙한 방법이라고 생각하지만 순수한 XAML입니다.

관련 문제