【问题标题】:WPF: Master/Detail - Disable detail TextBoxes if no records?WPF:主/详细信息 - 如果没有记录,则禁用详细文本框?
【发布时间】:2014-10-26 19:28:49
【问题描述】:

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

ListBox 旁边有一组TextBox 绑定到当前项目的字段。 (即Text={Binding Path=/SomeField}

当我的DataContextObservableCollection 为空时,如何禁用/灰显记录详细信息TextBoxes

【问题讨论】:

    标签: wpf xaml observablecollection master-detail


    【解决方案1】:

    你可以用一种风格来做到这一点:

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

    【讨论】:

    【解决方案2】:

    此答案假定您正在使用 mvvm 并且有一个视图模型来备份您的视图 - 我将在您的视图模型中创建一个只读 bool 属性,如果您的可观察集合的计数 > 0,则返回 true。

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

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

    【讨论】:

    • 您还需要处理 ObservableCollections "CollectionChanged" 事件...当此事件引发时,您需要为布尔值引发 PropertyChanged 事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2016-08-16
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多