簡體   English   中英

在WPF DataGrid中使用IValueConverter,具體取決於同一行的多個值

[英]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);
    }

我現在想做兩件事:

  1. 根據同一行的另一個值(例如“名稱”或“類型”)轉換值(例如,如果Type == X,則為Value * 0.41)

  2. 我想驗證(由用戶)寫入數據網格的值(例如,驗證模型的最小/最大值)

我在“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM