我通過DataContext
綁定的自定義對象的ObservableCollection
到ListBox
。WPF:主/細節 - 如果沒有記錄,禁用詳細文本框?
旁邊的ListBox
a有一組TextBox
綁定到當前項目的字段。 (即Text={Binding Path=/SomeField}
)
我如何可以禁用/變灰記錄細節TextBoxes
當我DataContext
的ObservableCollection
是空的?
我通過DataContext
綁定的自定義對象的ObservableCollection
到ListBox
。WPF:主/細節 - 如果沒有記錄,禁用詳細文本框?
旁邊的ListBox
a有一組TextBox
綁定到當前項目的字段。 (即Text={Binding Path=/SomeField}
)
我如何可以禁用/變灰記錄細節TextBoxes
當我DataContext
的ObservableCollection
是空的?
你可以用風格做到這一點:
<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>
這個答案假定您正在使用MVVM並有一個視圖模型來備份你的看法 - 我會在你的視圖模型創建一個只讀布爾屬性並返回true,如果你觀察的集合的計數> 0
你然後可以將bool綁定到必要文本框的isEnabled屬性,從而根據可觀察集合的值啓用或禁用它們。
編輯 - 根據下面的BenjaminPaul的評論,必須爲您的observable集合處理change事件,然後應該在您的bool屬性上調用propertyChanged以確保is被更新並傳遞迴視圖。
您還需要處理ObservableCollections「CollectionChanged」事件太...當引發此事件,您將需要提高PropertyChanged事件爲您布爾。 – BenjaminPaul 2014-09-02 14:12:39
好點 - 我會相應地調整我的答案。 – czuroski 2014-09-02 14:24:13
作爲補充說明:如果您需要將此應用於'TextBox'和'PasswordBox',您可以使用style inhertnace。請參閱:http://stackoverflow.com/a/12890047/3975887 – ddl877 2014-09-02 16:38:36