检查动态创建的两个DecimalUpDown之间的有效值 - MVVM

时间:2017-09-28 13:45:43

标签: c# wpf xaml mvvm

此问题与此帖有关:Check for Valid Values between two DecimalUpDown Controls - MVVM

动态创建两个DoubleUpDown。如何根据最大值和最小值检查这两者之间的验证。 (最大值[第一控制]不能低于最小值[第二控制])。

XAML代码:

<Window ....>
  <Window.DataContext>
    <local:ViewModel>
  </Window.DataContext>

  <StackPanel>
    <ItemsControl ItemsSource="{Binding ListOfControls}">
      <ItemsControl.ItemTemplate>
        <DataTemplate>
          <StackPanel>
            <xctk:DoubleUpDown Value={Binding Value, ValidationOnDataErrors=True" />
          </StackPanel>
        </DataTemplate>
      </ItemsControl.ItemTemplate>
    </ItemsControl>
  </StackPanel>  
</Window>

视图模型

public class ViewModel
{
  public ViewModel()
  {
    _listOfControls = new List<CreateControl>()
    {
      new CreateControl { Value = 0.0 },
      new CreateControl { Value = 0.0 }
    };
  }

  private List<CreateControl> _listOfControls;
  public List<CreateControl> ListOfControls
  {
    get { return _listOfControls; }
    set { _listOfControls = value; }
  }
}

CreateControl.cs

public class CreateControl : IDataErrorInfo, INotifyPropertyChanged
{
  private double _value;
  public double Value
  {
    get { return _value; }
    set { _value = value; }
  }

  public string Error { get { return null; } }
  public string this[string columnName]
  {
    get
    {
      // Error handling code here
      return null;
    }
  }

  PropertyChanged Event ...
}

谢谢

1 个答案:

答案 0 :(得分:-1)

如果你总是创建两个控件,一个用于最大值,另一个用于最小值,那么使用ItemsControl是没有意义的,因为那么控件的数量毕竟不是动态的。

请删除ItemsControl并使用我在上一个问题中建议的方法:

<Window ....>
    <Window.DataContext>
        <local:ViewModel>
    </Window.DataContext>

    <StackPanel>
        <xctk:DoubleUpDown Value="{Binding Min, ValidationOnDataErrors=True" />
        <xctk:DoubleUpDown Value="{Binding Max, ValidationOnDataErrors=True" />
    </StackPanel>
</Window>

ItemsControl似乎不是正确的选择。