如何将GridView作为ConverterParameter传递

时间:2012-04-11 12:10:46

标签: c# wpf xaml data-binding

我正在尝试将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();
    }

}
}

3 个答案:

答案 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作为转换器参数传递吗?