我正在处理MVVM模式之后的WPF项目。我有以下型号:在WPF DataGrid中使用IValueConverter取决于同一行的几个值
名称... |.Value.|.Unit.|.Type.|.Min.|.Max.|
Voltage| ..... 3 ..... | ... mV..| .... X .... | ... 0 ... | .... 5 .... |
当前| ... .1 .... | mA..| .... Y .... | ... 2 ... | .... 7 .... |
这是数据网格显示的内容:
名称... | .Value.|.Unit. |
Voltage| .... 3 ..... |.mV..|
Current| .... 1 ..... |.mA..|
模板( 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>
数据网格(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);
}
我想现在要做两件事情:
转换值(例如值* 0.41 if type == X)基于同一行的另一个值,如“Name”或“Type”
我想验证写入数据网格的值(用户)(例如验证min /最大值)
我在“NumTemplate”模板中添加了一个转换器。
使用转换器/验证来完成此操作是一个好主意吗?我真的很想将它实现为一个转换器,因为它很好地与其他所有逻辑分开。
在此先感谢。
如何获得ValueConverter中同一行的其他值? – user2799180