可观察的堆栈面板

时间:2019-05-08 22:40:02

标签: c# wpf

我需要创建一个ObservableCollection of ListBoxes作为我的列,并制作一个ObservableCollection of Buttons作为我ListBox的任务。

问题是我创建了一个水平StackPanel。

<StackPanel Name="panel" Orientation="Horizontal">
</StackPanel>
    public partial class MainWindow : Window
    {
        private ListBox currentList;
        public MainWindow()
        {
            InitializeComponent();

        }

        private void Button_Click2(object sender, RoutedEventArgs e)
        {
            currentList = new ListBox();
            Button b1 = new Button();
            b1.Content = "Add Card";
            b1.Height = 23;
            b1.Width = 100;
            b1.Click += B1_Click;
            currentList.Items.Add(b1);
            panel.Children.Add(currentList);
        }

        private void B1_Click(object sender, RoutedEventArgs e)
        {
            Button currentButton = (Button)sender;
            currentList = ((ListBox)currentButton.Parent);
            Button bt = new Button();
            bt.Content = "task";
            bt.Height = 23;
            bt.Width = 100;
            currentList.Items.Add(bt);
        }
    }

这就是我得到的结果:

https://imgur.com/nmvzfpI

这正是我需要的,除了我需要绑定StackPanel问题是不可能绑定它,并且由于某些原因,当我添加Vertical ListBoxes然后添加时,我无法使用Horizo​​ntal ListBox达到相同的结果按钮里面的结果是:

https://imgur.com/dO5WfOS

1 个答案:

答案 0 :(得分:1)

这是一个示例,说明如何使用ItemsControl中的Xaml更好地实现您要执行的操作。通过绑定到ObservableCollection并在集合中为每个项目创建ListBox来工作。 ListBox然后绑定到ObservableCollection内部以显示每个单独的项目。

<ItemsControl ItemsSource="{Binding MyCollection}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ListBox ItemsSource="{Binding}" Width="100" Height="auto">

            </ListBox>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

private ObservableCollection<ObservableCollection<string>> _myCollection;

public ObservableCollection<ObservableCollection<string>> MyCollection
{
    get { return _myCollection; }
    set { _myCollection = value; NotifyPropertyChanged }
}