C#'if'重新访问绑定值

时间:2013-06-12 00:28:48

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

如果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 找不到“已关闭”类型。验证您是否缺少程序集引用以及所有引用的程序集都有   已建成。

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

我是WPF和绑定的新手。你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

感谢大家纠正我的第一个问题和你的帮助。