2014-04-28 39 views
0

我有一個UserControl需要在複選框的基礎上與兩個DataContext綁定。在布爾條件下綁定DataContext

此UserControl必須顯示有關應用程序(全局)或所選DataGridRow的數據。

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

UserControl只有兩個文本字段來顯示名稱和年齡。如果選中「全局」複選框,那麼我想要將此用戶控件綁定到MainViewModel中的APerson(Person類)屬性中,並且如果未選中,那麼我必須將UserControl與SelectedItemDataGrid)綁定。 SelectedItem也是Person類型

回答

0

基本上,你可以玩你的ViewModel來得到你想要的。這是一種方法。

您會將Checkbox.IsChecked綁定到ViewModel中的「IsGlobal」屬性。 然後,您將綁定userControl到另一個屬性,例如ViewModel中的SomePerson。 最後,在IsGlobalsetter你將取決於IsGlobal布爾狀態改變SomePerson要麼APersonSelectedItem在DataGrid中。

+0

只能通過XAML來完成嗎?任何可能性? – UsmanAzam

+0

它可以。但是您必須在視圖中添加重複的用戶控件,並將它們的可見性綁定到IsGlobal,然後使用boolToVisibility轉換器僅顯示所需的。 – bit

0

[在此添加此項,因爲您希望以純粹的方式在XAML中執行此操作。我認爲在這裏堅持使用純粹的XAML並不是必不可少的,@位的答案是正確的選擇,IMO。]

您可以使用樣式使觸發器執行更改。

假設您的統一通信名稱爲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。