Je travaille sur un projet WPF suivant le modèle MVVM. Je n'ai le modèle suivant:Utilisez IValueConverter dans WPF DataGrid en fonction de plusieurs valeurs de la même ligne
Nom ... |.Value.|.Unit.|.Type.|.Min.|.Max.|
Voltage| ..... 3 ..... | ... mV..| .... X .... | ... 0 ... | .... 5 .... |
Current| ... ..1 ..... | ... mA..| .... Y .... | ... 2 ... | .... 7 .... |
Ceci est ce que le DataGrid montre:
Nom ... |.Value.|.Unit.|
Voltage| .... 3 ..... |.mV..|
Current| .... 1 ..... |.mA..|
Modèles (XAML):
<DataTemplate x:Key="NumTemplate">
<wpfToolkit:IntegerUpDown Value="{Binding Value, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource StimVoltageConverter},ConverterParameter=XXX}" />
</DataTemplate>
<DataTemplate x:Key="ComboboxTemplate">
<ComboBox ItemsSource="{Binding Path=XXX}"
DisplayMemberPath="Name"
SelectedValuePath="Value"
SelectedValue="{Binding Value, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
DataGrid (XAML):
<DataGrid ItemsSource="{Binding FixParaCollectionView}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="Name" Binding="{Binding Id}"/>
<DataGridTemplateColumn Header="Value">
<DataGridTemplateColumn.CellTemplateSelector>
<helper:TemplateSelector ComboboxTemplate="{StaticResource ComboboxTemplate}" NumTemplate="{StaticResource NumTemplate}"/>
</DataGridTemplateColumn.CellTemplateSelector>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Unit" Binding="{Binding Unit,NotifyOnTargetUpdated=True}">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
StimVoltageConverter: IValueConverter:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int val = (int)value;
return (int)(val/0.41);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
int val = (int)value;
return (int)(val * 0.41);
}
Je voudrais faire 2 choses maintenant:
valeurs Convert (par exemple Valeur * 0.41 si Type == X) basé sur une autre valeur de la même ligne, comme "Nom" ou "Type"
Je souhaite valider les valeurs écrites dans la grille de données (par l'utilisateur) (par exemple valider min/valeur maximale du modèle)
J'ai ajouté un convertisseur au modèle "NumTemplate".
Est-ce une bonne idée de le faire en utilisant un convertisseur/validation? Je voudrais vraiment mettre en œuvre ceci dans un convertisseur parce qu'il est bien séparé de toute autre logique.
Merci d'avance.
Comment obtenir d'autres valeurs de la même ligne dans ValueConverter? – user2799180