2013-12-12 71 views
0

我有以下问题:我需要在下面的代码中添加什么来告诉我的RadioButton绑定到连接到datagrid项目的“IsFacturation”布尔值?我使用DataTrigger来定义自己绑定到datagrid只读状态,所以我需要通过查看合适的父级来“绑定”绑定定义。我认为我必须玩RelativeSource ...WPF控件绑定到DataTrigger之前的绑定之前的绑定

我注意到,当一个数据网格项目的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项目属性。

非常感谢

+1

尝试'“{绑定路径= IsFacturation,UpdateSourceTrigger =的PropertyChanged,模式=双向}”'而不是如果您希望值立即更新。您在列中使用“ContentControl”的目的是什么?除了浪费资源外,它什么都不做 – Sheridan

+0

所以我有不必要的代码来使用我的两个数据触发器?什么是相关的代码来实现相同的行为?感谢您指出这一点。对不起,它不适用于'UpdateSourceTrigger = PropertyChanged',这很奇怪。 –

回答

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

不客气。我看到您将数据触发器设置为控件样式,而我们的方式是在样式数据触发器中设置控件。执行时间和资源使用情况最好的是什么?我相信我们的方式可能会节省资源,而您的执行速度更快? –

+1

在我的示例中,我刚刚将'Hidden'值更改为'Collapsed',因为它的效率稍高。将DataTrigger移到控件的主要原因是因为这就是他们应该在的位置......想到这样的触发器:*当某事发生时,控件会改变它自己的值*。当你开始尝试改变托管'Trigger'的控件之外的属性时,你可能遇到问题......它可能是可能的,但不可取。顺便说一句,你为什么认为你的方法会节省资源?您在每一行中都为“ContentControl”使用了额外的资源。 – Sheridan

0

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

我禁止了ContentControl和我现在工作的单选按钮的绑定。

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