如何将当前行“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
如果我了解您的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 converter
的MultiBinding
,而不是普通的绑定:
<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();
}
}