将字符串数组添加到ObservableCollection <string>不起作用</string>

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

标签: c# wpf data-binding foreach observablecollection

我尝试将字符串数组中的字符串添加到ObservableCollection。

我这样做的方式是:

在我的构造函数中,我实例化集合并添加eventhandler来调用我的方法,该方法将数组中的字符串添加到列表中:

 public CLoggerViewModel()
    {
        this._currenLogContent = new ObservableCollection<string>();
        this._memoryAppender.LogContentChanged += new LoggingEventHandler(OnLogContentChanged);
    }

在eventhandler中,我想迭代字符串数组并将每个字符串添加到集合中:

 public void OnLogContentChanged(object sender, LoggingEventArgs e)
 {
    string[] tmpString = { "A", "B", "C", "D" };

    foreach (string s in tmpString)
    {
        _currenLogContent.Add(s);
    }
 }

在我的论点中

e.LogEntries

保存我的字符串数组我总是拥有我期望的所有字符串。 为了简单/测试,我不使用从我的参数得到的数组并用A,B,C,D实例化它,因为我被要求改变它以便在这里验证它。

我的问题是,总是只将数组的第一个字符串添加到我的ObservableCollection中。 一旦添加了第一个字符串,似乎我的foreach迭代就会终止。

编辑:

在我的WPF XAML文件中,如果我的ObservableCollection绑定了以下列表框:

<ListBox Name="listViewLog" ItemsSource="{Binding LoggerViewModel.CurrentLogContent,UpdateSourceTrigger=PropertyChanged}" Margin="0,0,-248,-377" Grid.ColumnSpan="2" RenderTransformOrigin="0.586,0.51" Height="367" VerticalAlignment="Bottom" />

如果我删除带有绑定到我的Observablecollection的列表框,它会遍历foreachloop。因此列表框或从列表框到我的集合的绑定导致迭代停止。我已经尝试使用所有UpdateSourceTrigger选项(Default,Explicit,LostFocus,PropertyChanged)。 但在所有情况下,它都会在第一轮之后停止迭代。

我是否还需要在ListBox属性中设置其他内容以避免停止向Observablecollection添加字符串?

编辑:

我发现对我有用的唯一解决方案是将要添加到集合中的字符串换行到单独的类中并将对象添加到列表中。在这种情况下,如果我将对象添加到列表中,它不会破坏我的foreach循环。

public void OnLogContentChanged(object sender, LoggingEventArgs e)
    {
        string[] tmpString = { "A", "B", "C", "D" };

        foreach (string s in tmpString)
        {
            this.LogEntries.Add(new CLogEntry(s));
        }

    }

CLogEntry只是一个公开单个字符串的包装器。

使用这种解决方法它可以工作,但是,我仍然无法理解为什么如果我“直接”向Observablecollection添加一个字符串它不起作用。

1 个答案:

答案 0 :(得分:0)

您是否为ObservableCollection设置了另一个数据绑定?或者您是否设置了Control to Control Data Binding to ListBox?由于您的代码似乎是正确的,我无法重现问题,我认为有一个数据有限&#34;逻辑&#34;由ObservableCollection案例触发的错误 - 此错误阻止迭代完成。