我的ObservableCollection<string>
视图模型已绑定到TextBox
。用户必须能够使用某些分隔符(例如逗号或分号)输入文本数据,并将更改反映到ObservableCollection<string>
,因此如果我在框abc,123,one
中输入{{1}将有三个项目:ObservableCollection<string>
,abc
和123
。
我的示例ViewModel:
one
My TextBox:
class ViewModel {
public ObservableCollection<string> MyObservableCollection { get; set; }
}
我的价值转换器:
<TextBox Text="{Binding MyObservableCollection, Converter={StaticResource Conv}, Mode=TwoWay}"/>
但它没有理解的原因 - WPF不知道如何用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(',');
}
}
替换ObservableCollection<string>
。
但我不希望框架用新的string[]
对象替换我的ObservableCollection<string>
对象(在这种情况下,我可以创建一个新对象并将其返回ObservableCollection<string>
} 方法)。我希望它可以向现有ConvertBack
添加/删除项目。
如何实现这一点(没有另一个将在代码隐藏中完成工作的模型视图ObservableCollection<string>
属性)?
好吧,我放弃了... movel-view是要走的路......我希望一次能让它在几个领域工作,但那只是尴尬。
答案 0 :(得分:2)
我认为最好将数据的字符串表示添加到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}"/>