簡體   English   中英

如何將GridView作為ConverterParameter傳遞

[英]How to pass GridView as a ConverterParameter

我試圖將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();
    }

}
}

從.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">

你無法綁定它。

ConvertParameter繼承自Object,因此不可綁定。

但是,您可以在后面的代碼中定義Binding,而不是在XAML部分中進行。

System.Windows.Data.Binding b = new System.Windows.Data.Binding();
b.ConverterParameter = this;

請在此處閱讀ConvertParameter的限制

你可以使用ConverterParameter={Binding ElementName=[insert x:Name of grid view]}

雖然恕我直言,我會重新考慮這個需求 - 你真的需要將UIControl作為轉換器參數傳遞嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM