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

3

我有一个包含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都通过


既然你在CellTemplate级别,那不就是DataContext吗?我以前从未使用过Telerik,所以这只是一个猜测... - code4life
2个回答

0

如果我理解正确,您的UserControl托管了一个telerik:RadGridView控件。

您的UserControl具有给定的DataContext,其中似乎包含一个属性Procedures和一个属性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 中的属性,即包含 Procedures 和 IsPrevProc 的 DataContext。因此,这里的所有绑定都必须与此 DataContext 的属性相关。您不能在一个绑定中混合调用不同的 DataContext。

您可以将“previousProc”创建为此 DataContext 中的属性,以便直接调用它。

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

但是您不能在同一个绑定中同时执行两个操作。


0

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

然而,有一种替代解决方案。您可以使用MultiBindingmulti-value converter代替普通的绑定:

<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();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接