在DataTrigger覆盖之前,WPF控制绑定到先前的绑定

时间:2013-12-12 12:26:16

标签: c# wpf binding datagrid

我有以下问题:我需要在下面的代码中添加什么来告诉我的RadioButton绑定" IsFacturation"附加到datagrid项的布尔值?我使用DataTrigger定义自己绑定到datagrid readonly状态,所以我需要"回来"在绑定定义中,可能通过查看适当的父级。我想我必须使用RelativeSource ...

我观察到当一个datagrid项目的IsFacturation布尔值设置为true时,单选按钮不会被检查。

DataGrid项目是" Adresse"的可观察集合。对象,定义了一个" IsFacturation"属性。

    <DataGrid x:Name="AddressGrid" SelectionUnit="Cell" ItemsSource="{Binding Path=Adresses}" SelectionMode="Single">
        <DataGrid.Columns>
                <!-- Region Facturation -->
            <DataGridTemplateColumn Header="Facturation" SortMemberPath="IsFacturation" HeaderStyle="{StaticResource CenterAlignmentColumnHeaderStyle}" >
                <DataGridTemplateColumn.CellTemplate >
                    <DataTemplate>
                        <ContentControl>
                            <ContentControl.Style>
                                <Style TargetType="{x:Type ContentControl}">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding ElementName=AddressGrid,Path=IsReadOnly}" Value="True">
                                            <Setter Property="ContentTemplate">
                                                <Setter.Value>
                                                    <!-- Possibly create another contentcontrol which differentiates between errors -->
                                                    <DataTemplate>
                                                        <Image Source="Resources/Images/Check-icon.png" Visibility="Visible"/>
                                                    </DataTemplate>
                                                </Setter.Value>
                                            </Setter>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding ElementName=AddressGrid,Path=IsReadOnly}" Value="False">
                                            <Setter Property="ContentTemplate">
                                                <Setter.Value>
                                                    <DataTemplate>
                                                        <RadioButton GroupName="grpRadioButtonFacturationAddresses" 
                                                            IsChecked="{Binding Path=IsFacturation, UpdateSourceTrigger=LostFocus, Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" Visibility="Visible"/>
                                                    </DataTemplate>
                                                </Setter.Value>
                                            </Setter>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </ContentControl.Style>
                        </ContentControl>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

此类代码的目标是在数据网格只读时显示图像,而不显示单选按钮时显示图像。我仍然需要处理图像可见性(简单),但单选按钮状态直接链接到我选择的datagrid项属性。

非常感谢

2 个答案:

答案 0 :(得分:0)

这只是回答你的评论,而不是你的问题。在没有DataTrigger的情况下使用ContentControl的一种方法是将它们移动到实际控件:

<DataTemplate>
    <Grid>
        <Image Source="Resources/Images/Check-icon.png" Visibility="Visible">
            <Image.Style>
                <Style TargetType="{x:Type Image}">
                    <Setter Visibility="Collapsed" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=AddressGrid,Path=IsReadOnly}" Value="True">
                            <Setter Property="Visibility" Value="Visible">
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
        </Image>
        <RadioButton GroupName="grpRadioButtonFacturationAddresses" IsChecked="{Binding Path=IsFacturation, UpdateSourceTrigger=LostFocus, Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center">
            <RadioButton.Style>
                <Style TargetType="{x:Type RadioButton}">
                    <Setter Visibility="Visible" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=AddressGrid,Path=IsReadOnly}" Value="True">
                            <Setter Property="Visibility" Value="Collapsed">
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </RadioButton.Style>
        </RadioButton>
    </Grid>
</DataTemplate>

答案 1 :(得分:0)

我想我找到了问题的原因。

我现在禁止ContentControl和我的radiobutton的绑定。

编辑:哦,我没有看到你的回应谢里丹:)