我正在尝试将ListView或GridView作为ConverterParameter传递 但是,在Converter例程中,参数将作为类型字符串
下面是XAML列表视图和Converter类的一部分。
任何帮助非常感谢。谢谢!!!
<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();
}
}
}
答案 0 :(得分:19)
从.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">
答案 1 :(得分:7)
你无法绑定它。
ConvertParameter继承自Object,因此不可绑定。
但是,您可以在后面的代码中定义Binding,而不是在XAML部分中进行。
System.Windows.Data.Binding b = new System.Windows.Data.Binding();
b.ConverterParameter = this;
请阅读有关ConvertParameter here
的限制答案 2 :(得分:-3)
您可以使用ConverterParameter={Binding ElementName=[insert x:Name of grid view]}
虽然恕我直言,我会重新考虑这个需求 - 你真的需要将UIControl作为转换器参数传递吗?