【问题标题】:Adding other items to Custom ListBox/ListView and how can user add their own items将其他项目添加到自定义列表框/列表视图以及用户如何添加自己的项目
【发布时间】:2013-09-24 19:42:48
【问题描述】:

尝试学习 WPF,这让我发疯。所以我正在尝试做一些类似于我在这里发布的图片的事情。但是我只能将组合框、文本、复选框放在一起,而不是并排……我该怎么做?

我还想出了如何在用户按下按钮时将“文本”添加到列表框中,但是当他们从文本框中添加文本时我需要它。组合框、复选框和按钮也随之添加。但我不知道该怎么做。

我假设我必须为这些东西开设一个课程。但是,如果我在 XAML 中对其进行编码,我该怎么做呢?这个 WPF 让我很困惑。

<ListBox HorizontalAlignment="Left" Height="195" Margin="25,345,0,0" VerticalAlignment="Top" Width="650">
                <ListBoxItem>
                        <StackPanel Orientation="Horizontal" Height="45"> <!--Stacks Items Horizontally-->
                            <ComboBox Width="100" Height="30">
                                <ComboBoxItem IsSelected="True">DirecTV</ComboBoxItem>
                                <ComboBoxItem>Hyundai</ComboBoxItem>
                                <ComboBoxItem>None</ComboBoxItem>
                            </ComboBox>
                            <TextBox Width="445" Height="30" Text="Follow RedZone on Twitter" VerticalContentAlignment="Center"/>
                            <CheckBox IsChecked="True" VerticalAlignment="Center">
                                <CheckBox.LayoutTransform>
                                    <ScaleTransform ScaleX="1.5" ScaleY="1.5"></ScaleTransform>
                                </CheckBox.LayoutTransform>
                            </CheckBox>
                        <Button Content="Delete"  Height="Auto" Width="Auto" HorizontalAlignment="Right" VerticalAlignment="Top" VerticalContentAlignment="Top"/>
                    </StackPanel>
                </ListBoxItem>
            </ListBox>

【问题讨论】:

  • 您需要DataGrid。或者以其他方式为您的 ListView 定义几列。或者以其他方式使用ListBoxItemTemplate
  • 是的,网格是要走的路:这里的教程:wpf-tutorial.com/panels/grid
  • 我确定 Grid 可以工作.. 但我发现 StackPanel 可以完美地满足我的需求。但是我仍然无法让(用户)将这样的类添加到我的列表框中

标签: c# wpf listview listbox


【解决方案1】:

定义一个类来保存项目

public class myListBoxRow
{
    public string comboBoxSelection {get;set;}
    public string textBlockText {get;set;}
    public bool checkBoxChecked {get;set;}
}

现在在某处(通常在 ViewModel 中)定义 ObservableCollectionList

public ObservableCollection myListBoxRows<myListBoxRow> {get;set}

然后将ListBoxItemsSource绑定到你的收藏

<ListBox ItemsSource="{Binding myListBoxRows}" .../>

要获得您想要的控件,请为您的 ListBox 定义一个 ItemTemplate

<ListBox ItemsSource="{Binding myListBoxRows}" ...>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <ComboBox ItemsSource="{Binding cboItems}" Width="50" SelectedItem="{Binding comboBoxSelection}" />
                <TextBlock Text="{Binding textBlockText}"></TextBlock>
                <CheckBox IsChecked="{Binding checkBoxChecked}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

在 WPF 中研究 MVVM,因为到处都有大量此类示例。为您将其联系在一起的关键部分是您的列表框/列表视图的数据模板

【讨论】:

  • public ObservableCollection myListBoxRows {get;set} 该行不起作用。特别是 C# 不喜欢 get 和 set 部分。有什么想法吗?
  • 实际上它没有识别 ObserverableColleciton.. 虽然我使用 System.Collections.ObjectModel 添加了;我不明白 =\ 对不起 C# 新手
  • 你搞清楚了吗?
  • no =( 我明白你想说的,这对我来说很有意义......但它不起作用。我将主要编辑我的代码,那么你认为你可以它可以工作吗?在您的代码中的某个地方出错或 C# 不喜欢它.. 特别是我认为当我尝试像您建议的那样创建 ObserveableCollection 时.. 很确定这只是语法
  • 将主要代码编辑为我现在在 xaml 中的内容。我确定我必须再次在那里放置一些绑定,然后修复 C#..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多