Как передать GridView как ConverterParameter
Я пытаюсь передать ListView или GridView в качестве ConverterParameter
Однако в подпрограмме "Конвертер" параметр поступает как строка типа
Ниже приведена часть списка XAML List и класса 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();
}
}
}
Ответы
Ответ 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 и поэтому не может быть привязан.
Однако вы можете определить свой Binding в коде, а не делать это в части XAML.
System.Windows.Data.Binding b = new System.Windows.Data.Binding();
b.ConverterParameter = this;
Пожалуйста, ознакомьтесь с ограничениями на ConvertParameter здесь
Ответ 3
Вы можете использовать ConverterParameter={Binding ElementName=[insert x:Name of grid view]}
Хотя IMHO я бы пересмотрел необходимость - действительно ли вам нужно передать UIControl в качестве параметра Converter?