如何将 GridView 作为 ConverterParameter 传递
Posted
技术标签:
【中文标题】如何将 GridView 作为 ConverterParameter 传递【英文标题】:How to pass GridView as a ConverterParameter 【发布时间】:2012-04-23 17:45:57 【问题描述】:我正在尝试将 ListView 或 GridView 作为 ConverterParameter 传递 但是,在 Converter 例程中,参数以类型字符串的形式出现
下面是 XAML 列表视图和转换器类的一部分。
非常感谢任何帮助。谢谢!!!
<ListView Name="SeqDtStDataListView1" Grid.Row="1"
DataContext="Binding Path=DisplayDT[0], Converter =StaticResource
CNVToColumn,ConverterParameter=?????"
VerticalContentAlignment="Stretch" VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
SelectionChanged="SEQDatalistview_SelectionChanged" Margin="5">
<ListView.View >
<GridView x:Name="SeqDtStDataGridView1"/>
</ListView.View>
</ListView>
转换器:
namespace MFTest.Converters
public class CNVToColumn : IValueConverter
public object Convert(object value,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
DataTable dt = (DataTable)value;
GridView GV = (GridView)parameter; <========= fail here ===========
if (dt != null && GV != null)
foreach (var colum in dt.Columns) // Binding the Columns
DataColumn dc = (DataColumn)colum;
GridViewColumn column = new GridViewColumn();
column.DisplayMemberBinding = new Binding(dc.ColumnName);
column.Header = dc.ColumnName;
GV.Columns.Add(column);
return null;
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
throw new NotImplementedException();
【问题讨论】:
【参考方案1】:从 .NET 4 开始,您可以使用 x:Reference
,它允许您避免 ElementName
绑定,该绑定只能在依赖属性上设置,同时实现几乎相同的目标。
由于循环依赖限制,您不能引用控件内部或其在树中的祖先。但是,您可以将绑定向上移动一个级别并仅继承 DataContext
,例如
<Border DataContext="Binding Path=DisplayDT[0],
Converter=StaticResource CNVToColumn,
ConverterParameter=x:Reference SeqDtStDataListView1">
<ListView Name="SeqDtStDataListView1" Grid.Row="1">
【讨论】:
*您不能在其内部或其后代中引用控件*。你的意思是祖先。你不能引用祖先。【参考方案2】:你不能绑定到它。
ConvertParameter 继承自 Object,因此不可绑定。
但是,您可以在后面的代码中定义您的绑定,而不是在 XAML 部分中进行。
System.Windows.Data.Binding b = new System.Windows.Data.Binding();
b.ConverterParameter = this;
请阅读有关 ConvertParameter here 的限制
【讨论】:
@Luis Filipe - 不确定链接的帖子。恕我直言,ViewModel 不应包含任何依赖属性。我将 DP 更多地与视图/控件相关联,而不是与视图无关的 ViewModel。ConverterParameter
不继承自任何东西,它是一个属性,问题是 MarkupExtension
不继承自 DependencyObject
。【参考方案3】:
你可以使用ConverterParameter=Binding ElementName=[insert x:Name of grid view]
尽管恕我直言,我会重新考虑需要 - 您真的需要将 UIControl 作为 Converter 参数传递吗?
【讨论】:
在部分类的运行时弹出此错误:无法在“Binding”类型的“ConverterParameter”属性上设置“Binding”。只能在 DependencyObject 的 DependencyProperty 上设置“绑定”。 @IrmiMrm - 简短的回答..你不能这样做..很容易。您只能绑定到 DependencyObject 派生的 DP 属性。绑定不符合条件 - 您正在尝试为另一个绑定的 ElementName 属性指定绑定。似乎太令人费解了。必须有一个更简单的问题解决方案。以上是关于如何将 GridView 作为 ConverterParameter 传递的主要内容,如果未能解决你的问题,请参考以下文章
VMware vCenter Converter Standalone迁移
如何将整数作为 ConverterParameter 传递?
如何以编程方式将按钮添加到 gridview 并将其分配给特定的代码隐藏函数?
如何将 @ConfigProperties 与 Converter 类一起使用