【问题标题】:How do I store email addresses input in a textbox to viewModels string array?如何将文本框中输入的电子邮件地址存储到 viewModels 字符串数组?
【发布时间】:2014-02-10 10:01:59
【问题描述】:

我有一个视图LinkWindow 在这里我有一个文本框,可以通过逗号分隔值输入电子邮件地址,之后我还有一个用于电子邮件正文的文本框,在底部我有一个发送按钮。我希望这在 viewModel 中实现。

如果我用户输入abcd@test.com,degf@gmail.com,test@gmail.com,test@yahoo.com,那么这些值应该存储在视图模型的字符串数组中。虽然我想在运行时在放置逗号后查看电子邮件 ID 验证。有人可以建议我该怎么做吗?

我会写代码

private string _name
public string Name
{
    get { return _name; }
    set 
    { 
        _name = value;
        RaisePropertyChanged("Name");
    }
}

并且在 XAML 中将文本框的文本属性绑定到“名称”,但这只会绑定一个电子邮件 ID。请提出建议

【问题讨论】:

  • 您需要使用 ValueConverter 将逗号分隔的字符串转换为字符串数组并返回 wpftutorial.net/ValueConverters.html
  • 但是,如果它的格式是正确的电子邮件地址,我该如何验证视图中的电子邮件地址?
  • 您可以使用 IDataErrorInfo c-sharpcorner.com/UploadFile/ff2f08/… 使用 CustomValidationAttribute 来验证视图模型中的电子邮件地址数组

标签: c# wpf email mvvm


【解决方案1】:

@ChristianPaulin 已经为您提供了一些很好的提示...您确实可以使用IValueConverter Interface 的实例将逗号分隔的string 转换为strings 的集合。有关如何实现它的详细信息,请参阅此链接页面。

虽然我目前无法实际测试,但我认为您应该能够实现您的 Convert 方法,如下所示:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    if (value.IsNull() || value.GetType() != typeof(string) || targetType != typeof(ObservableCollection<string>)) return null;
    string emailAddresses = (string)value;
    string[] addresses = emailAddresses.Split(new string[1] { "," }, StringSplitOptions.RemoveEmptyEntries);
    ObservableCollection<string> addressCollection = new ObservableCollection<string>();
    foreach (string address in addresses) addressCollection.Add(address.Trim());
    return addressCollection;
}

为了澄清,这应该在表单中输入string

abcd@test.com,degf@gmail.com,test@gmail.com,test@yahoo.com

并返回ObservableCollection&lt;string&gt;

您可以使用它从视图模型中的 ObservableCollection&lt;string&gt; 属性(假设名为 EmailAddresses)绑定到 UI 中的 TextBox.Text 属性,如下所示(不要忘记定义您的 YourConvertersPrefix XAML命名空间前缀):

UserControlWindow Resources

<YourConvertersPrefix:StringToStringsConverter x:Key="StringToStringsConverter" />

UserControlWindow

<TextBox Text="{Binding EmailAddresses, 
    Converter={StaticResource StringToStringsConverter}}" />

【讨论】:

  • 您的解决方案很好,但似乎不起作用。在我的 UserControl 中,我添加了资源并添加了带有键值的转换器。再次为我添加的文本框Text="{Binding EmailAddress, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource stringsToArrayOfStringsConverter}}",但转换器没有命中
  • 首先,让我们明确一点……我的解决方案确实有效。如果您错误地实施了它,那是另一回事。您是否也将Resources 部分中的Converter 重命名为stringsToArrayOfStringsConverter?我不可能猜到你做错了什么......检查上面的链接页面,看看你应该如何设置你的Converter。另外,从你的Converter 的名字来看,你不应该像我告诉你的那样使用string[]...使用ObservableCollection&lt;string&gt;
猜你喜欢
  • 1970-01-01
  • 2020-01-27
  • 2021-05-02
  • 1970-01-01
  • 2023-04-03
  • 2014-04-06
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
相关资源
最近更新 更多