WPF:Master/Detail-如果没有记录,是否禁用细节文本框?

WPF:Master/Detail-如果没有记录,是否禁用细节文本框?,wpf,xaml,observablecollection,master-detail,Wpf,Xaml,Observablecollection,Master Detail,我有一个通过DataContext绑定到ListBox的定制对象的ObservableCollection 在列表框旁边有一组绑定到当前项字段的文本框。i、 e.Text={Binding Path=/SomeField} 当我的DataContext的ObservableCollection为空时,如何禁用/灰显记录详细信息文本框?此答案假设您正在使用mvvm,并且有一个viewmodel来备份您的视图-如果您的ObservableCollection的计数>0,我将在viewmodel中创建

我有一个通过DataContext绑定到ListBox的定制对象的ObservableCollection

在列表框旁边有一组绑定到当前项字段的文本框。i、 e.Text={Binding Path=/SomeField}


当我的DataContext的ObservableCollection为空时,如何禁用/灰显记录详细信息文本框?

此答案假设您正在使用mvvm,并且有一个viewmodel来备份您的视图-如果您的ObservableCollection的计数>0,我将在viewmodel中创建一个只读bool属性并返回true

然后可以将bool绑定到必要文本框的isEnabled属性,从而根据可观察集合的值启用或禁用它们


编辑-根据BenjaminPaul下面的评论,必须为您的可观察集合处理更改事件,然后您应该调用bool属性上的propertyChanged,以确保更新is并将其传递回视图。

您可以使用样式:

<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>

您还需要处理ObservableCollections CollectionChanged事件。。。引发此事件时,您需要引发布尔值的PropertyChanged事件。作为补充说明:如果您需要将此应用于文本框和密码框,则可以使用HertNACE中的样式。见: