WPF列表框代码背后

时间:2015-11-08 20:30:05

标签: c# wpf xaml listbox

我的程序需要一些帮助。我做了简单的程序,用于添加删除它们并保存的类别。该程序看起来像这样

link

所有选项都有效,但是当我点击"添加类别"我无法在列表框中看到我的类别的名称,我也不知道为什么如果有人可以帮我解决这个问题会很棒。

XAML代码:

<Grid>
    <TextBox Name="CategoryTextBox"  HorizontalAlignment="Left" Height="23" Margin="25,26,0,0" TextWrapping="Wrap" Text="Category Name" VerticalAlignment="Top" Width="120"/>
    <Button Click="Button_Click" Content="Add Category" HorizontalAlignment="Left" Margin="171,26,0,0" VerticalAlignment="Top" Width="111"/>
    <Button Click="Button_Click_1" Content="Save" HorizontalAlignment="Left" Margin="171,104,0,0" VerticalAlignment="Top" Width="111"/>
    <Button Click="Button_Click_2" Content="Delete Category" HorizontalAlignment="Left" Margin="171,64,0,0" VerticalAlignment="Top" Width="111"/>
    <ListBox Name="CategoryListBox" ItemsSource="{Binding}" HorizontalAlignment="Left" Height="195" Margin="25,64,0,0" VerticalAlignment="Top" Width="120">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding CategoryName}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

CategoryList.cs代码:

public partial class CategoryList
{
        public string CategoryName { get; set; }

}

C#代码:

public void Button_Click(object sender, RoutedEventArgs e)
{
          List<CategoryList> cat = new List<CategoryList>();
          string text = CategoryTextBox.Text;
          cat.Insert(0, new CategoryList { CategoryName = text });
}

1 个答案:

答案 0 :(得分:0)

首先,看起来您没有数据上下文。如你所说,你正在使用代码隐藏,所以在构造函数中我会做这样的事情

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
        SomeList = new ObservableCollection<CategoryList>();         
    }

    public ObservableCollection<CategoryList> SomeList { get; set; }
}

其次,您应该将集合类型更改为ObservableCollection。当您使用ObservableCollection时,它会在使用集合更改事件时自动更新绑定。

最后,您可以将Listbox itemsource设置为代码隐藏中的ObservableCollection属性。

<ListBox Name="CategoryListBox" ItemsSource="{Binding SomeList}" HorizontalAlignment="Left" Height="195" Margin="25,64,0,0" VerticalAlignment="Top" Width="120">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding CategoryName}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

然后,当您使用AddCategory按钮事件向ObservableCollection添加数据时,它将更新集合并同时更新列表框。