2012-06-29 111 views
1

我有一個列表視圖,有兩列,一列包含一個文本框,另一列包含一個複選框。這些綁定到一個自定義對象的ObservableCollection,它包含一個用於文本框的字符串和一個用於複選框的布爾值。WPF Listview&Checkboxes - 使用相對源時的綁定問題

所有工作都很好,直到我嘗試讓複選框的檢查事件突出顯示它是列表視圖中的行,如this article

我的問題是複選框不再綁定到ObservableCollection。文本框結合好,但改變checbox聲明:

<CheckBox IsChecked="{Binding RestrictedEdit}"/> 

這樣:

<CheckBox IsChecked="{Binding RestrictedEdit, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"/> 

停止複選框綁定和列表視圖顯示與複選框的布爾狀態的所有選中irrespectivate。我究竟做錯了什麼?

回答

2

您正在嘗試綁定RestrictedEdit屬性,其中ListViewItem沒有。該酒店在視圖模型,存儲在DataContext宣佈,所以這應該工作:

<CheckBox IsChecked="{Binding DataContext.RestrictedEdit, 
           RelativeSource={RelativeSource FindAncestor, 
               AncestorType={x:Type ListViewItem}}}"/> 

不過,我看不出有任何理由使用這個代碼,而不是簡單的IsChecked="{Binding RestrictedEdit}"CheckBoxListViewItem繼承DataContext,所以沒有理由使用相對來源。

+1

感謝您花時間解釋。我已經瀏覽了幾篇關於做我想做的文章,看起來我已經混合了一些例子。現在這個工作很完美,我知道相對綁定是如何工作的,歡呼! – GrandMasterFlush

0

讓綁定原樣(不使用RelativeSource),而是使用相當於自定義對象類爲TargetType的樣式或DataTemplate,並在RestrictedEdit上設置DataTrigger。 例如風格:

<Style x:Key="MyStyle" TargetType="MyClass"> 
    <Setter Property="BackGround" Value="White" /> 
    <Style.Trigger> 
    <DataTrigger Binding="{Binding RestrictedEdit}" Value="False"> 
     <Setter Property="BackGround" Value="Gray" /> 
     </DataTrigger> 
    </Style.Trigger> 
</Style> 

定義這個風格,比如說,在你的應用程序資源(在App.xaml中)。 然後在你的listview中使用:

ItemContainerStyle="{StaticResource MyStyle}"