【问题标题】:Data Validation on elements in a collection with same property names对具有相同属性名称的集合中的元素进行数据验证
【发布时间】:2021-07-09 08:12:31
【问题描述】:

我想这是一个奇怪的问题,因为我无法找到有关此的任何信息。

我有一个名为 TextBoxes 的类,它有几个属性,如下所示:

public class TextBoxes
{
    public string Tag{ get; set; }
    public string Text {get; set; }
}

在我的视图模型中,我将其中一些添加到集合中:

...
List<TextBoxes> Controls = new List<TextBoxes>;
...

foreach (var item in somelist)
{
      Controls.Add(new TextBoxes(){ Tag=item.tag, Text=""});
      ...
}

最后,在我的视图中,我使用DataTemplate 将所有这些控件添加到我的UserControl

<DataTemplate DataType="{x:Type clases:TextBoxes}">
        <StackPanel Orientation="Horizontal" Margin="10"  HorizontalAlignment="Stretch">
            <Label Content="{Binding Tag}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBox Text="{Binding Text, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" MinWidth="50" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,0">
            </TextBox>
        </StackPanel>
</DataTemplate>

 ...

 <ItemsControl ItemsSource="{Binding Controls}">
          <ItemsControl.ItemsPanel>
              <ItemsPanelTemplate>
                    <WrapPanel/>
              </ItemsPanelTemplate>
         </ItemsControl.ItemsPanel>
  </ItemsControl>

到目前为止一切顺利,这段代码显示了一堆带有标签的文本框,这里没有问题。

问题是当我尝试向每个对象的属性Text 添加验证时。由于它们中的每个属性名称都相同,因此当我验证规则并尝试获取错误消息时,这包含所有它们的错误,因此我无法显示它们中的每一个。

我使用helper 来验证数据。我将展示一个如何定义规则的示例:

foreach (var item in somelist)
{
      Validator.AddRule(() => item.Text, (
                  () => RuleResult.Assert(int.TryParse(item.Text, out o), "Error in " + item.Tag)));

如您所见,在规则中我将属性设置为item.Text。由于此名称对所有它们都相同,因此在显示每个 TextBox 的错误时会显示所有错误。

我希望我说清楚了,任何人都可以在这里阐明任何观点。

【问题讨论】:

  • 每个TextBoxes 对象都应该有自己的Validatoritem.Validator.AddRule(...)
  • @mm8 感谢您的评论!让我试试。我不确定我是否喜欢将验证器移动到班级,但如果它有效......我会更新它是否有效。

标签: c# wpf mvvm


【解决方案1】:

每个TextBoxes 对象都应该有自己的Validator。然后,您将为每个项目调用AddRule

foreach (var item in somelist)
    item.Validator.AddRule(...);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    相关资源
    最近更新 更多