【问题标题】:WPF listbox code behind背后的 WPF 列表框代码
【发布时间】:2015-11-08 20:30:05
【问题描述】:

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

所有选项都有效,但是当我单击“添加类别”时,我在列表框中看不到我的类别名称,我不知道为什么,如果有人可以帮助我解决这个问题,那就太好了。

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 });
}

【问题讨论】:

    标签: c# wpf xaml listbox


    【解决方案1】:

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

    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 时,它将更新集合并更新您的列表框。

    【讨论】:

    • 如果解决方案对您有用,您会接受这个作为答案吗?
    猜你喜欢
    • 2016-01-30
    • 2015-05-16
    • 2010-09-18
    • 1970-01-01
    • 2011-02-02
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多