在多个ObservableCollection周围移动对象

时间:2018-08-22 16:20:20

标签: c# .net wpf observablecollection

我有三个Items Control,详细信息如下,目前我有三个随附的Observable集合,每个控件一个。我希望能够将一个对象从组框之一移动到另一个中。目前,我正在将其从原始的可观察集合中删除,然后将其添加到新的集合中。但是,这导致了线程问题,UI并不总是更新移动。有什么更好的方法可以在可观察的集合之间移动对象。比如只有一个,但是改变在哪个控件中呈现?任何帮助表示赞赏。

XAML:

<GroupBox x:Name="OnTimeGroup">
    <ScrollViewer VerticalScrollBarVisibility="Auto">
        <StackPanel>
            <ItemsControl x:Name="OnTimeCards">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <UserControl:OnTimeCard Visibility="Visible" />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </StackPanel>
    </ScrollViewer>
</GroupBox>
<GroupBox x:Name="LateGroup">
    <StackPanel>
        <ItemsControl x:Name="LateCards">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <UserControl:LateActionNeededCard Ignore="LateCardIgnoreClicked" Publish="LateCardPublishClicked" Visibility="Visible" />
                    </materialDesign:TransitioningContent>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </StackPanel>
    </ScrollViewer>
</GroupBox>
<GroupBox x:Name="PublishedGroup">
    <ScrollViewer VerticalScrollBarVisibility="Auto">
        <StackPanel>
            <ItemsControl x:Name="PublishedCards">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <UserControl:PublishedCard Update="PublishedCardUpdateClicked" Visibility="{Binding IsVisible}" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>
        </ScrollViewer>
    </GroupBox>

C#

private ObservableCollection<LiveTime> OnTimeCardsCollection = new ObservableCollection<LiveTime>();
private ObservableCollection<LiveTime> LateCardsCollection = new ObservableCollection<LiveTime>();
private ObservableCollection<LiveTime> PublishedCardsCollection = new ObservableCollection<LiveTime>();

当前代码的伪代码

当用户单击对象上的按钮时,将其从当前可观察的集合中删除。然后在相邻的可观察集合中创建一个全新的对象。

1 个答案:

答案 0 :(得分:0)

您在这里有两个不同的问题:

  1. 更改可观察的集合并对其进行响应的UI:为此创建了可观察的集合,并且删除/添加您应该没有问题。当然,例外是在UI线程上未完成工作或同步未正确完成时。我建议启用集合同步,而不是编组对UI线程的每次调用。请参阅有关collection synchronization

  2. 的信息
  3. 对所有三个项目都有一个集合,但是显示出不同的内容:是的。您可以通过应用适当的过滤器来使用CollectionView进行此操作。这是一篇讨论CollectionViewSource

  4. 的文章