UWP 10(xaml) - MVVM - 具有嵌套Observable Collection的列表框

时间:2017-06-17 07:08:04

标签: c# mvvm listbox uwp observablecollection

所以第一次。此外,我不是程序员,更像是脚本/设计师。

反正。我有一个Listbox,它的itemsSource使用了一个可观察的集合。添加新条目并保存它们不是问题,所有这些都有效。进行更改(通过INotifyChanged等)一切正常。

XAML:

board.color

这部分有效。 (选定值/索引除外)

ProjectsListed是一个可观察的集合,是公司的一部分。 所以这个想法是。当我选择一家公司时......该公司列出的项目出现了。这是有意的。

然而..对于我的生活,我无法让“选定的项目”正常工作。

我的尝试:

 <ListBox x:Name="ProjectsListedView"
                 ItemsSource="{Binding Companies.ProjectsListed}"
                 SelectedValue="{Binding ProjectsName}"
                 SelectedIndex="-1"
                 SelectionMode="Extended">
 </Listbox>

甚至:

<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
两个都没有用。无论如何。奇怪的是......有一个选择正在进行中。 创建列表框并添加集合(从xml文件)。我可以选择一个项目..并将所选项目中的信息导入文本框。例如:

<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>

那么问题是什么: “选定项目”无法删除。 `

<TextBox Text="{Binding SelectedItem.ProjectName, Mode=TwoWay, ElementName=ProjectsListedView}"
                 Style="{StaticResource TB_M}"
                 Width="450" 
                 Name="ProjectNameInput" 
                 PlaceholderText=""
                 Grid.Row="0"/>

任何人都可以指出我正确的方向(例子将非常感谢)。如果需要更多代码,请询问。如前所述,这是我的第一个问题/帖子。

亲切的问候。

2 个答案:

答案 0 :(得分:0)

我认为问题在于:if(checkData)

如果你看一下here(如果锚点不起作用,搜索SelectionMode),你可以找到这一行:

  

当SelectionMode为Multiple或Extended时,使用SelectedItems属性获取所选项目。

如果您不需要多次选择,请将SelectionMode="Extended"更改为SelectionMode。否则,您需要使用Single属性而不是SelectedItems

答案 1 :(得分:0)

我已成功解决了大部分问题。

删除部分感谢朋友的帮助以及kennyzx发表的评论中的一点点

public async static Task DeleteProjectFile(this Company companies)
    {
        var file = await GetCompanyFile(companies.CompanyName);
        if (file == null)
        {
            var folder = await GlobalFolder();
            file = await folder.CreateFileAsync(companies.CompanyName + GlobalFileExtension, CreationCollisionOption.ReplaceExisting);
        }

            companies.ProjectsListed.RemoveAt(0);
    }

它可能不会删除所选内容,但至少它会删除一个条目。

存储“选定项目”的修复可能有点奇怪,但我只是在

上创建了一个额外的xml序列化
public async void ProjectsListedView_SelectionChanged(object sender, SelectionChangedEventArgs e)

在不同的位置。每次调用“框架”时,它都会重新加载。 然而,实际选择的setter(突出显示)不起作用,但总而言之,它是固定的。

感谢所有试图提供帮助的人。