[英]Use IValueConverter within WPF DataGrid depending on several values of the same row
我正在按照MVVM模式进行WPF项目。 我有以下模型:
名称...值。单位。类型。最小。最大。最大
电压...... 3 ..... ¦ ... mV ...... X .... ¦ ... 0 ... ¦ .... 5 .... ¦
电流...... 1 ..... ¦ ... mA ...... Y .... ¦ ... 2 ... ¦ .... 7 .... ¦
这是数据网格显示的内容:
名称... ¦.Value.¦.Unit.¦
电压¦ .... 3 ..... ¦.mV..¦
电流..... 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>
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);
}
我现在想做两件事:
根据同一行的另一个值(例如“名称”或“类型”)转换值(例如,如果Type == X,则为Value * 0.41)
我想验证(由用户)写入数据网格的值(例如,验证模型的最小/最大值)
我在“ NumTemplate”模板中添加了一个转换器。
使用转换器/验证来执行此操作是一个好主意吗? 我真的很想将其实现到转换器中,因为它与所有其他逻辑很好地分开了。
提前致谢。
为了进行验证,您想对属性绑定使用验证功能。
至于计算值,如果有计算值,通常会避免使用依赖项属性。 通常更喜欢INotifyPropertyChanged。 int Value { get { computation...; } set { reverse computation...; PropertyChanged("Value");}}
您可以在依赖项的父值和PropertyChanged(new PropertyChangedArgs("Value"));
上进行propertychanged通知PropertyChanged(new PropertyChangedArgs("Value"));
实际上,我通常避免在视图模型上使用DependencyProperties。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.