2013-10-08 23 views
0

我正在处理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); 
    } 

我想现在要做两件事情:

  1. 转换值(例如值* 0.41 if type == X)基于同一行的另一个值,如“Name”或“Type”

  2. 我想验证写入数据网格的值(用户)(例如验证min /最大值)

我在“NumTemplate”模板中添加了一个转换器。

使用转换器/验证来完成此操作是一个好主意吗?我真的很想将它实现为一个转换器,因为它很好地与其他所有逻辑分开。

在此先感谢。

回答

0

对于验证,您希望使用属性绑定的验证功能。

就计算值而言,如果我有计算值,通常会避免使用依赖项属性。通常更喜欢INotifyPropertyChanged。 int Value { get { computation...; } set { reverse computation...; PropertyChanged("Value");}}

您可以对相关的父值的PropertyChanged通知,并PropertyChanged(new PropertyChangedArgs("Value"));

其实,我通常避免的ViewModels DependencyProperties。

+0

如何获得ValueConverter中同一行的其他值? – user2799180

相关问题