Hallo zusammen,
ich habe ein Problem mit dem ich nicht weiter komme und hoffe es kann mir jemand helfen.
Ich habe ein Datagrid in meinem XAML mit einem EventTrigger + InvokeCommandAction
<i:EventTrigger EventName="ColumnReordered">
<i:InvokeCommandAction
Command="{Binding HistoryColumnsReordered}"
CommandParameter="{Binding Columns, UpdateSourceTrigger=PropertyChanged, ElementName=historyGrid, Converter={StaticResource DatagridColumnsToDisplayIndicesConverter}}" />
</i:EventTrigger>
Mein Problem ist, wenn ich einen Breakpoint in den DatagridColumnsToDisplayIndicesConverter setze, kommt er dort nur genau einmal hin (und tut auch was er soll), anschließend wird das Command auch mit dem korrekten Parameter aufgerufen.
Wenn ich jetzt manuell im Datagrid eine Spalte verschiebe, wird zwar das Command aufgerufen, aber der übergebene Parameter ist derselbe wie beim ersten Aufruf und der Converter wird nicht mehr durchlaufen.
Kann sich darauf jemand einen Reim machen?
Ich würde erwarten, dass der Converter jedes Mal durchlaufen wird. Und ich frage mich auch, wenn er nicht durchlaufen wird, woher bekommt das Command im Viewmodel den alten Parameter-Wert immer wieder?
Hier noch der Code des Converters, auch wenn der vermutlich keine Rolle für das Problem spielt:
public class DatagridColumnsToDisplayIndicesConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Collection<DataGridColumn> columns)
{
List<Tuple<int, string>> columnIndices = columns.Select(column => new Tuple<int, string>(column.DisplayIndex, (string)column.Header)).ToList();
System.Diagnostics.Debug.WriteLine("DatagricColumnsToDisplayIndicesConverter " + string.Join(",", columnIndices.Select(x => x.Item1)));
return columnIndices;
}
throw new ArgumentException("Invalid binding parameters for DatagridColumnsToDisplayIndicesConverter, parameter must be a value of type Collection<DatagridColumn>!");
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new Exception("Invalid call - one way only");
}
}
Danke schonmal
Hatte ein ähnliches Problem.
Die Lösung war, commandparameter müssen im xaml vor dem command stehen
Ich würde das Binding Testweise mal direkt auf das historyGrid setzen und dann im Converter die Columns mit historyGrid.Columns abfragen.
Da Columns keine DependencyProperty ist, wird der Wert für den CommandParameter nie aktualisiert.
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”