【问题标题】:C# 'if' Binding value revisited重新访问 C# 'if' 绑定值
【发布时间】:2013-06-08 00:00:46
【问题描述】:

如果Closed 属性的值为true,我想操作窗体上的控件。

有一个类似的question 描述DataTemplate 触发器。我相信这是我需要的,但我无法让它发挥作用。

我的DataGrid定义如下:

<DataGrid SelectedItem="{Binding SelectedAccount, Mode=TwoWay}" ItemsSource="{Binding Accounts, Mode=TwoWay}">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Account Name">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox x:Name="AccountName" Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{RelativeSource FindAncestor, AncestorType={x:Type IAccount}}"  Value="True">
                            ... property adjustments ...
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        ...

它不编译并引发错误

无法将“System.Windows.Data.RelativeSource”类型的对象转换为 输入“System.Windows.Data.BindingBase”

我也尝试过应用其他问题中描述的绑定。

<DataTemplate DataType="models:IAccount"> OR <DataTemplate DataType="models:Account">
    ...
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Closed}" Value="True">
            ... property adjustments ...
        </DataTrigger>
    </DataTemplate.Triggers>

但这引发了其他错误消息

错误 1 XML 命名空间“http://schemas.microsoft.com/winfx/2006/xaml/presentation”中不存在标记“已关闭”。

错误 2 未找到“已关闭”类型。验证您没有缺少程序集引用,并且所有引用的程序集都有 已构建。

错误 3Windows Presentation Foundation (WPF) 项目不支持关闭。

我对 WPF 和绑定非常陌生。你能帮忙吗?

【问题讨论】:

  • "它不编译并抱怨绑定";你能提供实际的错误细节吗?
  • 谢谢你,这很好。错误消息是它找不到 IAccount。
  • 我得到了绑定工作。但这只是问题的一部分。我仍然不知道如何在第一个网格中应用样式并解析 DataTemplate.Triggers。这是我在 StackOverflow 上的第一个问题。我应该将绑定发布为答案并为样式/第一个网格打开单独的问题吗?或者更确切地说,用新发现更新问题?是否应该删除首先使用尝试进行的编辑?

标签: c# wpf data-binding if-statement wpfdatagrid


【解决方案1】:

结果证明解决方案非常简单。绑定需要定义如下。

<DataTemplate DataType="models:IAccount"> OR <DataTemplate DataType="models:Account">
    ...
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Closed}" Value="True">
            ... property adjustments ...
        </DataTrigger>
    </DataTemplate.Triggers>

请记住也为您在 xaml 中的类型添加命名空间。

感谢大家纠正我的第一个问题以及您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 2011-10-05
    • 2016-03-27
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多