如何将当前行“This”传递给转换器参数

本文关键字:参数 转换器 This | 更新日期: 2023-09-27 18:35:45

所以我有一个视图,包含一个 telerik RadGridView,这个视图绑定到几个项目,但重要的是我需要将一个项目的可见性绑定在一列中,到 2 个项目。

转换器将正确评估可见性,但是我需要传回上一个Proc(当前处理)以及"This",这也是一个proc,只是那一行。

    <telerik:RadGridView Name="ProcedureGrid"
                         DockPanel.Dock="Left"
                         SelectionMode="Single"
                         SelectionUnit="FullRow"
                         ItemsSource="{Binding Procedures}"
                         IsReadOnly="True"
                         AutoGenerateColumns="False"
                         ShowGroupPanel="False"
                         ShowColumnHeaders="False"  
                         CanUserReorderColumns ="False"
                         RowIndicatorVisibility="Collapsed"
                         Visibility="Collapsed"
                         Width="200"
                         FontSize="18"
                         SelectionChanged="ProcedureGrid_SelectionChanged"
                         >
        <telerik:RadGridView.Columns>
            <telerik:GridViewDataColumn Header="Name"
                                        AllowDrop="False"
                                        DataMemberBinding="{Binding Converter={StaticResource langConverter}}"
                                        IsGroupable="False" 
                                        IsFilterable="False"
                                        MaxWidth="155"/>
            <telerik:GridViewColumn>
                <telerik:GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <nav:SmallForwardNavigateIcon MaxWidth="30" DockPanel.Dock="Right" Margin="1"
                                                      Cursor="Hand" VerticalAlignment="Center" HorizontalAlignment="Center" 
                                                      MouseDown="SmallForwardNavigateIcon_MouseDown" 
                                                      Visibility="{Binding RelativeSource={RelativeSource FindAncestor, 
                                                                                            AncestorType={x:Type UserControl}}, 
                                                                                            Path=DataContext.previousProc, 
                                                                                            Converter={StaticResource IsPrevProc}}" />
                    </DataTemplate>
                </telerik:GridViewColumn.CellTemplate>
            </telerik:GridViewColumn>
        </telerik:RadGridView.Columns>
    </telerik:RadGridView>

任何人都可以看到我哪里出错了,以及我可以做些什么来修复 xaml 以同时传递 previousproc 和 This Back

如何将当前行“This”传递给转换器参数

如果我了解您的UserControl主机,则为telerik:RadGridView控件。

您的 UserControl 具有给定的 DataContext,它似乎包含属性 Procedure 和属性 IsPrevProc。

Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.previousProc,Converter={StaticResource IsPrevProc}}" />

这段代码似乎是错误的,因为你写了:

Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}

这意味着您正在祖先 DataContext 中查找属性,其中包含 Procedure 和 IsPrevProc 的属性。因此,此处的所有绑定都必须具有此数据上下文的属性。不能混合使用对不同 DataContext 的绑定调用。

你可以做的是创建你的"previousProc"作为这个数据上下文中的一个属性,以便你可以直接调用它。

或者,您可以将"IsPrevProc"定义为网格行的DataContext的属性。

但不能在同一绑定中同时执行这两项操作。

ConverterParameter属性不是依赖属性,因此不能绑定。

然而,还有另一种解决方案。您可以使用带有multi-value converterMultiBinding,而不是普通的绑定:

<nav:SmallForwardNavigateIcon MaxWidth="30" DockPanel.Dock="Right" Margin="1"
                                                  Cursor="Hand" VerticalAlignment="Center" HorizontalAlignment="Center" 
                                                  MouseDown="SmallForwardNavigateIcon_MouseDown" 
                                                  >
    <nav:SmallForwardNavigateIcon.Visibility>
        <MultiBinding Converter="{StaticResource IsPrevProc}">
            <Binding Path="DataContext.previousProc" RelativeSource="{RelativeSource Mode=FindAncestor,
                                                 AncestorType=UserControl}"/>
            <Binding Path="DataContext.newProc" RelativeSource="{RelativeSource Mode=Self}"/>
        </MultiBinding>
    </nav:SmallForwardNavigateIcon.Visibility>
</nav:SmallForwardNavigateIcon>

在第二个绑定中传递新的 proc/this 值。(如果需要,请使用相对来源)

多值转换器:

public class IsPrevProc : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        //Logic of new proc and Previous Proc
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}