单击按钮时将项目添加到选择列表框

时间:2017-02-11 13:16:26

标签: wpf data-binding listbox

我已经设置了一个包含多个列表框和一个添加按钮的WPF:

    <Window x:Class="QuickSlide_2._0.Window1"
    x:Name="load_style"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:self="clr-namespace:QuickSlide_2._0"
    xmlns:e="http://schemas.microsoft.com/expression/2010/interactivity"
    Title="Load_style" Height="300" Width="300" MinHeight="720" MinWidth="1280" WindowStyle="None" AllowsTransparency="True" Background="#B0000000" AllowDrop="True" WindowStartupLocation="CenterScreen" ShowInTaskbar="False">

  <Grid>

    <Rectangle Height="720" HorizontalAlignment="Left" Name="rectangle1" Stroke="#00000000" VerticalAlignment="Top" Width="1280" MinHeight="320" MinWidth="380" Fill="DarkGray"/>


    <ListBox Height="241" HorizontalAlignment="Left" Margin="502,371,0,0" Name="Presentation_slide_items" VerticalAlignment="Top" Width="199" />

    <ListBox Name="subjects_list" Margin="74,154,1039,171" ItemsSource="{Binding ElementName=styles_list, Path=SelectedItem.subjects}"/>
    <ListBox Name="sub_subjects_list" Margin="264,154,849,171" ItemsSource="{Binding ElementName=subjects_list, Path=SelectedItem.sub_subjects}"/>
    <ComboBox x:Name="styles_list" HorizontalAlignment="Left" VerticalAlignment="Top" Width="120" Margin="74,112,0,0"/>
    <ListBox Name="user_inputs" Margin="502,154,565,421" ItemsSource="{Binding ElementName=sub_subjects_list, Path=SelectedItem.possible_input, Mode=TwoWay}" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBox Name="TextBoxList" Text="{Binding input}" BorderThickness="0" />                     
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    <Button x:Name="button_add_input" Content="Add" HorizontalAlignment="Left" Margin="502,279,0,0" VerticalAlignment="Top" Width="106" Command="{Binding ElementName=sub_subjects_list.add_input} />
</Grid>

现在,当我点击按钮&#34; button_add_input&#34;时,我想在user_inputs列表框的列表中添加一个额外的user_input。我一直在搜索,它看起来像使用&#34;命令&#34;按钮的选项可能是要走的路。 这是我的班级&#34; sub_subject&#34;

        public class sub_subject
{
    public string short_name { get; set; }
    public string name { get; set; }
    public bool read_from_db { get; set; }
    public string table_name { get; set; }
    //public ObservableCollection<string> possible_input { get; set; }
    public ObservableCollection<possible_input> possible_input { get; set; }

    public sub_subject(string name)
    {
        this.name = name;

        possible_input = new ObservableCollection<possible_input>();
        //possible_input = new ObservableCollection<string>();
    }
    public override string ToString()
    {
        return this.name;
    }
    public void add_input()
    {
        possible_input input = new possible_input();
        input.input = "";
        possible_input.Add(input);
    }
}

我想我可以在类中添加一个函数,它将一个possible_input添加到ObservableCollection并在按钮的命令中调用此函数。但我无法弄清楚如何设置正确的命令。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我假设sub_subject是窗口(视图)的viewmodel(datacontext)。

在这种情况下,您应该为项目添加一个Command类。这是ICommand的实现。您可以在此处找到ICommand的实现:https://msdn.microsoft.com/en-us/magazine/dd419663.aspx

之后,您必须在viewmodel中为调用add_input方法的命令创建一个属性。然后,将command属性绑定到按钮的Command属性。