[英]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.