2014-09-02 67 views
0

我通過DataContext綁定的自定義對象的ObservableCollectionListBoxWPF:主/細節 - 如果沒有記錄,禁用詳細文本框?

旁邊的ListBox a有一組TextBox綁定到當前項目的字段。 (即Text={Binding Path=/SomeField}

我如何可以禁用/變灰記錄細節TextBoxes當我DataContextObservableCollection是空的?

回答

0

你可以用風格做到這一點:

<Style TargetType="TextBox"> 
    <Style.Triggers> 
     <!-- When the collection itself is null --> 
     <DataTrigger Binding="{Binding }" Value="{x:Null}"> 
      <Setter Property="IsEnabled" Value="False" /> 
     </DataTrigger> 
     <!-- When the collection has no items --> 
     <DataTrigger Binding="{Binding Count}" Value="0"> 
      <Setter Property="IsEnabled" Value="False" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+1

作爲補充說明:如果您需要將此應用於'TextBox'和'PasswordBox',您可以使用style inhertnace。請參閱:http://stackoverflow.com/a/12890047/3975887 – ddl877 2014-09-02 16:38:36

0

這個答案假定您正在使用MVVM並有一個視圖模型來備份你的看法 - 我會在你的視圖模型創建一個只讀布爾屬性並返回true,如果你觀察的集合的計數> 0

你然後可以將bool綁定到必要文本框的isEnabled屬性,從而根據可觀察集合的值啓用或禁用它們。

編輯 - 根據下面的BenjaminPaul的評論,必須爲您的observable集合處理change事件,然後應該在您的bool屬性上調用propertyChanged以確保is被更新並傳遞迴視圖。

+1

您還需要處理ObservableCollections「CollectionChanged」事件太...當引發此事件,您將需要提高PropertyChanged事件爲您布爾。 – BenjaminPaul 2014-09-02 14:12:39

+0

好點 - 我會相應地調整我的答案。 – czuroski 2014-09-02 14:24:13