gpt4 book ai didi

c# - 如何绑定(bind)和 ConvertBack 分隔的 TextBox 字符串到 ObservableCollection

转载 作者:行者123 更新时间:2023-12-03 10:59:00 25 4
gpt4 key购买 nike

我有 ObservableCollection<string> 的 View 模型绑定(bind)到 TextBox .用户必须能够输入带有一些分隔符(比如逗号或分号)的文本数据,并将更改反射(reflect)到 ObservableCollection<string> ,所以如果我在框中输入 abc,123,one , ObservableCollection<string>将包含三个项目:abc , 123one .
我的示例 View 模型:

class ViewModel {
public ObservableCollection<string> MyObservableCollection { get; set; }
}
我的文本框:
<TextBox Text="{Binding MyObservableCollection, Converter={StaticResource Conv}, Mode=TwoWay}"/>
我的值(value)转换器:
public class ObservableCollectionToAndFromString : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
ObservableCollection<string> oc;
if (targetType != typeof (string) || (oc = value as ObservableCollection<string>) == null)
return Binding.DoNothing;

return string.Join(",", oc);
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var str = value as string;
return str == null
? Binding.DoNothing
: str.Split(',');
}
}
但由于可以理解的原因它不起作用 - WPF 不知道如何替换 ObservableCollection<string>string[] .
但我不希望框架取代我的 ObservableCollection<string>带有新 ObservableCollection<string> 的对象对象(在这种情况下,我可以创建一个新对象并在 ConvertBack 方法中返回它)。我希望它在现有的 ObservableCollection<string> 中添加/删除项目.
我怎样才能做到这一点(没有另一个模型 View string 将在代码隐藏中完成工作的属性)?
编辑:
好的,我放弃了... movel-view 是要走的路...我希望一次使它在多个领域中起作用,但这太尴尬了。

最佳答案

我认为最好将数据的字符串表示形式添加到您的 View 模型中。

internal class ViewModel
{
public ObservableCollection<string> MyObservableCollection { get; set; }

public string MyString
{
get { return string.Join(",", MyObservableCollection); }
set { // update observable collection here based on value }
}
}

<TextBox Text="{Binding MyString, Mode=TwoWay}"/>

关于c# - 如何绑定(bind)和 ConvertBack 分隔的 TextBox 字符串到 ObservableCollection<string>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26254325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com