如何将ConvertBack分离的TextBox字符串绑定到ObservableCollection <string>?</string>

时间:2014-10-08 10:09:53

标签: c# wpf mvvm data-binding binding

我的ObservableCollection<string>视图模型已绑定到TextBox。用户必须能够使用某些分隔符(例如逗号或分号)输入文本数据,并将更改反映到ObservableCollection<string>,因此如果我在框abc,123,one中输入{{1}将有三个项目:ObservableCollection<string>abc123

我的示例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是要走的路......我希望一次能让它在几个领域工作,但那只是尴尬。

1 个答案:

答案 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}"/>