C# 如何将分隔的文本框字符串绑定和转换回ObservableCollection<;字符串>;?
我有一个带有C# 如何将分隔的文本框字符串绑定和转换回ObservableCollection<;字符串>;?,c#,wpf,mvvm,data-binding,binding,C#,Wpf,Mvvm,Data Binding,Binding,我有一个带有ObservableCollection的视图模型,它绑定到一个文本框。用户必须能够使用一些分隔符(比如逗号或分号)输入文本数据,并将更改反映到observedcollection,因此如果我在框中键入abc,123,one,那么observedcollection将有三项:abc,123和one 我的示例视图模型: class ViewModel { public ObservableCollection<string> MyObservableCollecti
ObservableCollection
的视图模型,它绑定到一个文本框
。用户必须能够使用一些分隔符(比如逗号或分号)输入文本数据,并将更改反映到observedcollection
,因此如果我在框中键入abc,123,one
,那么observedcollection
将有三项:abc
,123
和one
我的示例视图模型:
class ViewModel {
public ObservableCollection<string> MyObservableCollection { get; set; }
}
类视图模型{
公共ObservableCollection MyObservableCollection{get;set;}
}
我的文本框:
<TextBox Text="{Binding MyObservableCollection, Converter={StaticResource Conv}, Mode=TwoWay}"/>
我的值转换器:
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(',');
}
}
公共类ObservableCollectionToAndFromString:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
可观察收集oc;
if(targetType!=typeof(string)| |(oc=作为ObservableCollection的值)==null)
不做任何事;
返回字符串。Join(“,”,oc);
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
var str=字符串形式的值;
返回str==null
?装订。什么都不做
:str.Split(',');
}
}
但出于可以理解的原因,它不起作用-WPF不知道如何用string[]
替换observedcollection
但是我不希望框架用新的observateCollection
对象替换我的observateCollection
对象(在这种情况下,我可以创建一个新对象,并在ConvertBack
方法中返回它)。我想让它在现有的可观察集合
中添加/删除项目
如何实现这一点(没有另一个模型视图string
属性来完成代码隐藏的工作)
编辑:
好吧,我放弃。。。movel view是一条路要走。。。我希望它能一次在多个字段上工作,但这太尴尬了。我认为最好在viewmodel中添加数据的字符串表示形式
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}"/>
内部类视图模型
{
公共ObservableCollection MyObservableCollection{get;set;}
公共字符串MyString
{
获取{return string.Join(“,”,MyObservableCollection);}
设置{//根据值在此处更新可观察集合}
}
}
我认为最好在viewmodel中添加数据的字符串表示形式
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}"/>
内部类视图模型
{
公共ObservableCollection MyObservableCollection{get;set;}
公共字符串MyString
{
获取{return string.Join(“,”,MyObservableCollection);}
设置{//根据值在此处更新可观察集合}
}
}
我认为最好在viewmodel中添加数据的字符串表示形式
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}"/>
内部类视图模型
{
公共ObservableCollection MyObservableCollection{get;set;}
公共字符串MyString
{
获取{return string.Join(“,”,MyObservableCollection);}
设置{//根据值在此处更新可观察集合}
}
}
我认为最好在viewmodel中添加数据的字符串表示形式
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}"/>
内部类视图模型
{
公共ObservableCollection MyObservableCollection{get;set;}
公共字符串MyString
{
获取{return string.Join(“,”,MyObservableCollection);}
设置{//根据值在此处更新可观察集合}
}
}
这是我目前的解决方案,但我不满意。额外的领域和缺乏概括困扰着我。。。(是的,这就是视图模型的用途,@Dennis,但我很乐意将此解决方案应用到其他地方以及许多字段上,只需一笔……@Tal您的视图模型应提供易于视图使用的数据。如果你正在构建一个复杂的东西(而且你必须跳转才能实现它),那么你就做错了。仅仅用一个转换器是做不到的。正如@Dennis提到的,这就是为什么我们有一个视图模型层。因此,我们可以使数据适应表示层。所以你不应该为这样使用它而烦恼。@Tal:在网上搜索“ViewModel基本上是一个类固醇上的值转换器”,你会发现相当有趣的阅读。这是我目前的解决方案,但我不满意。额外的领域和缺乏概括困扰着我。。。(是的,这就是视图模型的用途,@Dennis,但我很乐意将此解决方案应用到其他地方以及许多字段上,只需一笔……@Tal您的视图模型应提供易于视图使用的数据。如果你正在构建一个复杂的东西(而且你必须跳转才能实现它),那么你就做错了。仅仅用一个转换器是做不到的。正如@Dennis提到的,这就是为什么我们有一个视图模型层。因此,我们可以使数据适应表示层。所以你不应该为这样使用它而烦恼。@Tal:在网上搜索“ViewModel基本上是一个类固醇上的值转换器”,你会发现相当有趣的阅读。这是我目前的解决方案,但我不满意。额外的领域和缺乏概括困扰着我。。。(是的,这就是视图模型的用途,@Dennis,但我很乐意将此解决方案应用到其他地方以及许多字段上,只需一笔……@Tal您的视图模型应提供易于视图使用的数据。如果你正在构建一个复杂的东西(而且你必须跳转才能实现它),那么你就做错了。仅仅用一个转换器是做不到的。正如@Dennis提到的,这就是为什么我们有一个视图模型层。因此,我们可以使数据适应表示层。所以你不应该为这样使用它而烦恼。@Tal:在网上搜索“ViewModel基本上是一个类固醇上的值转换器”,你会发现相当有趣的阅读。这是我目前的解决方案,但我不满意。额外的五