我正在尝试对数据网格行中的控件使用多重绑定当我更改绑定之一的数据上下文时,不会返回值

问题描述

我的数据网格中的行显示了名为 TranDetailItems 的 ItemsSource 可观察集合对象的不同属性。该对象是 TranDetailItem 类的集合。每个项目都有一个 IsBusy 和 IsProtected 依赖属性。我试图通过使用多绑定设置它们的 IsEnabled 属性来控制用户对每行中某些元素的输入。这对我的数据网格行中的所有控件都按预期工作,但我必须更改 DataContext 的一个按钮控件除外。对于那个按钮,我需要查看 viewmodel 而不是 listitem 来获取命令操作和其他属性。我必须使用该 DataContext 是有原因的,所以请不要只是建议我消除它。所以我尝试了两种方法来设置按钮的 IsEnabled 属性。一种是使用与其他控件相同的多重绑定,但添加元素名称以尝试从网格行中的另一个控件获取 DataContext。我尝试过的另一种方法是使用多重绑定(有效)在按钮以外的控件上设置 IsEnabled 属性,然后使用 elementname 将按钮的 IsEnabled 属性绑定到另一个控件的 IsEnabled 属性。这些方法都不起作用。有人可以帮我把这个绑定正确吗?此处显示按钮之前的 xaml 和文本块。我已验证项目源类中的属性设置正确,因为多绑定适用于网格行中的其他控件。

使用多重绑定正确设置 IsEnabled 的控件的数据模板。

        <DataTemplate>
   <TextBlock x:Name="DetAcctName"  Style="{StaticResource MyTextBlockStyle}" 
        Text="{Binding AcctName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
        FontSize="18" HorizontalAlignment="Left" VerticalAlignment="Center"
        TextAlignment="Left" textwrapping="Wrap" Margin="10,10,2" >
     <TextBlock.IsEnabled>
        <MultiBinding Converter="{StaticResource FalseAndFalseConverter}">
           <Binding Path="IsBusy" />
           <Binding Path="IsProtected" />
        </MultiBinding>
     </TextBlock.IsEnabled>
  </TextBlock>
</DataTemplate>

无法设置 IsEnabled 的按钮控件的数据模板。请注意我尝试的两种方法

        <DataTemplate>
   <ctls:MyBasicButton ButtonName="trn.btn_FindAccount" Style="{StaticResource 
         MyImageOnlyButtonStyle}" DataContext="{Binding RelativeSource={RelativeSource 
         FindAncestor,AncestorType={x:Type UserControl}},Path=DataContext}"
         Image="{StaticResource SearchBlue}" CollectionKey="{Binding RegisterListIndex}"
         HorizontalAlignment="Center" VerticalAlignment="Center"
         MaxImageSize="18" BorderThickness="0" Margin="2,0"
         Background="Transparent"  KeyboardNavigation.IsTabStop="False" 
         ignore:IsEnabled="{Binding ElementName=DetAcctName,Path=IsEnabled}"
         Command="{Binding ButtonpressedCommand,Source={StaticResource viewmodelbase}}" 
         CommandParameter="{Binding Mode=OneWay,RelativeSource={RelativeSource Self}}" >
      <ctls:MyBasicButton.IsEnabled>
         <MultiBinding Converter="{StaticResource FalseAndFalseConverter}">
            <Binding ElementName="DetAcctName" Path="DataContext.IsProtected" />
            <Binding ElementName="DetAcctName" Path="DataContext.IsBusy" />
         </MultiBinding>
      </ctls:MyBasicButton.IsEnabled>
      <ctls:MyBasicButton.ToolTip >
         <ctls:MyHelpTip Style="{StaticResource MyHelpTipStyle}"
               Visibility="{Binding ShowHelpTips,Converter={StaticResource 
                  BoolToVisibilityConverter}}">
            <views:HelpTipView DataContext="{StaticResource HelpTipviewmodel}" 
               ControlID="trn_FindAcct" />
        </ctls:MyHelpTip>
     </ctls:MyBasicButton.ToolTip>
   </ctls:MyBasicButton>
 </DataTemplate>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)