PDA

View Full Version : [WPF] Combobox MultiBinding: MultiConverter richiamato due volte, non viene visualizz


robertino_salemi
26-02-2015, 14:57
Buonasera,
in una colonna del mio DataGrid ho inserito una TextBlock per visualizzare il valore ed una ComboBox for modificare il valore della cella.

Quando click sulla cella per modificare il valore, si verificano due problemi:
1) l'item selezionato non è visualizzato nella griglia.
2) il MultiConverter viene richiamato due volte (errore verificato tramite il DEBUG del codice).

Perchè?

XAML

<DataGridTemplateColumn Header="{StaticResource datagridDay}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Day, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Name="dgCmbDay" DataContext="{Binding}">
<ComboBox.ItemsSource>
<MultiBinding Converter="{StaticResource DateNumNameConverter}" >
<MultiBinding.Bindings>
<Binding ElementName="dgPlan" Path="CurrentItem"/>
<Binding Source="{StaticResource AnalysisPlanViewModel}" Path="ListDayNameOfWeek"/>
<Binding Source="{StaticResource AnalysisPlanViewModel}" Path="ListDayNumOfMonth"/>
<Binding Path="Items"></Binding>
</MultiBinding.Bindings>
</MultiBinding>
</ComboBox.ItemsSource>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>


My Converter:

public class DayNumName : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values == null || values.Length < 4)
return null;

AnalysisPlanItemExt analisysPlanItem = (AnalysisPlanItemExt)values[0];
List<string> listDayOfWeek = (List<string>)values[1];
List<string> listDayNumOfMonth = (List<string>)values[2];

if (analisysPlanItem.Type != null)
{
//Day of Weeks
if (analisysPlanItem.Type.Value.Equals(Definition.SchedTypeEnum.DayOfWeek))
return listDayOfWeek;

if (analisysPlanItem.Type.Value.Equals(Definition.SchedTypeEnum.DayOfMonth))
return listDayNumOfMonth;
}

return null;
}

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new System.NotImplementedException();
}
}


Thanks!

robertino_salemi
26-02-2015, 16:29
Grazie al suggerimento dell'utente di un altro forum ho risolto:

1) Per visualizzare l'item selezionato nella cella ho aggiunto:

<ComboBox Name="dgCmbDay" DataContext="{Binding}" SelectedItem="{Binding Day}">

nella definizione della ComboBox.

2) Il fatto che il Converter venga richiamato due volte, viene considerato "normale".

Grazie! ;)