wpf向列表框添加新项
抱歉,如果语法是关闭的,我在记事本上键入了这个(带VS的计算机出现临时问题) 我有一个类wpf向列表框添加新项,wpf,listbox,wpf-controls,binding,observablecollection,Wpf,Listbox,Wpf Controls,Binding,Observablecollection,抱歉,如果语法是关闭的,我在记事本上键入了这个(带VS的计算机出现临时问题) 我有一个类电影,带有标题属性,我有 Dim movieList = New ObservableCollection(of Movie) Private Sub SelectMovie(ByVal sender As Object, ByVal e As SelectionChangedEventArgs) For Each m As Movie in movieList If lb1.Selec
电影
,带有标题
属性,我有
Dim movieList = New ObservableCollection(of Movie)
Private Sub SelectMovie(ByVal sender As Object, ByVal e As SelectionChangedEventArgs)
For Each m As Movie in movieList
If lb1.SelectedItem = "New" Then
m.Add(New Movie())
End If
Next
End Sub
movieList已使用临时值初始化,最后一个值为“新建”在构造函数中,我迭代了movielist并将内容放入列表框中
lb1.Items.Add(m)
在主窗口中.xaml我有
<Grid Name="moviePage" >
<ListBox Name="lb1" SelectionChanged="SelectMovie">
</Grid>
我知道这种方法是错误的,因为我在使用列表时修改了列表,但我似乎找不到解决方法
这样做的目的是让列表框显示一组电影,如果从列表中选择了“new”,则可以添加新电影。下面是一个工作代码示例:
public MainWindow()
{
InitializeComponent();
_movies = new ObservableCollection<Movie>(
new[]
{
new Movie { Name = "Foo" },
new Movie { Name = "Bar" },
new Movie { Name = "(New)" },
});
lb1.ItemsSource = _movies;
}
ObservableCollection<Movie> _movies;
private void SelectMovie(object sender, SelectionChangedEventArgs e)
{
var selectedMovie = lb1.SelectedItem as Movie;
if (selectedMovie == null) return;
if (selectedMovie.Name == "(New)")
{
var newMovie = new Movie { Name = "Untitled" };
_movies.Insert(_movies.Count - 1, newMovie);
lb1.SelectedItem = newMovie;
e.Handled = true;
}
}
public主窗口()
{
初始化组件();
_电影=新的可观察集合(
新[]
{
新电影{Name=“Foo”},
新电影{Name=“Bar”},
新电影{Name=“(new)”},
});
lb1.ItemsSource=\u电影;
}
可观察收集电影;
私有void SelectMovie(对象发送者,SelectionChangedEventArgs e)
{
var selectedMovie=lb1.SelectedItem作为电影;
if(selectedMovie==null)返回;
如果(selectedMovie.Name==“(新建)”)
{
var newMovie=新电影{Name=“Untitled”};
_movies.Insert(_movies.Count-1,newMovie);
lb1.SelectedItem=newMovie;
e、 已处理=正确;
}
}
话虽如此,我认为这不是正确的方法。我认为您最好更改ListBox的模板,以便它显示绑定到的项目列表,然后在底部(列表之外)显示一个“新建”按钮或链接
下面是一个非常简单的示例:
<ListBox x:Name="lb1" DisplayMemberPath="Name" SelectionChanged="SelectMovie">
<ListBox.Template>
<ControlTemplate>
<StackPanel>
<ItemsPresenter />
<Button Click="AddMovie>New Movie</Button>
</StackPanel>
</ControlTemplate>
</ListBox.Template>
</ListBox>
下面是一个工作代码示例:
public MainWindow()
{
InitializeComponent();
_movies = new ObservableCollection<Movie>(
new[]
{
new Movie { Name = "Foo" },
new Movie { Name = "Bar" },
new Movie { Name = "(New)" },
});
lb1.ItemsSource = _movies;
}
ObservableCollection<Movie> _movies;
private void SelectMovie(object sender, SelectionChangedEventArgs e)
{
var selectedMovie = lb1.SelectedItem as Movie;
if (selectedMovie == null) return;
if (selectedMovie.Name == "(New)")
{
var newMovie = new Movie { Name = "Untitled" };
_movies.Insert(_movies.Count - 1, newMovie);
lb1.SelectedItem = newMovie;
e.Handled = true;
}
}
public主窗口()
{
初始化组件();
_电影=新的可观察集合(
新[]
{
新电影{Name=“Foo”},
新电影{Name=“Bar”},
新电影{Name=“(new)”},
});
lb1.ItemsSource=\u电影;
}
可观察收集电影;
私有void SelectMovie(对象发送者,SelectionChangedEventArgs e)
{
var selectedMovie=lb1.SelectedItem作为电影;
if(selectedMovie==null)返回;
如果(selectedMovie.Name==“(新建)”)
{
var newMovie=新电影{Name=“Untitled”};
_movies.Insert(_movies.Count-1,newMovie);
lb1.SelectedItem=newMovie;
e、 已处理=正确;
}
}
话虽如此,我认为这不是正确的方法。我认为您最好更改ListBox的模板,以便它显示绑定到的项目列表,然后在底部(列表之外)显示一个“新建”按钮或链接
下面是一个非常简单的示例:
<ListBox x:Name="lb1" DisplayMemberPath="Name" SelectionChanged="SelectMovie">
<ListBox.Template>
<ControlTemplate>
<StackPanel>
<ItemsPresenter />
<Button Click="AddMovie>New Movie</Button>
</StackPanel>
</ControlTemplate>
</ListBox.Template>
</ListBox>
你的问题是什么?你的代码不工作吗?这是一种不会导致错误的方法。我遇到一个错误,指出在迭代数组时无法向数组中添加内容。我的公司。这有VS现在有问题,所以我只是用我记得发生的事情打了这个。我现在想不出别的了,所有的想法都很好你的问题是什么?你的代码不工作吗?这是一种不会导致错误的方法。我遇到一个错误,指出在迭代数组时无法向数组中添加内容。我的公司。这有VS现在有问题,所以我只是用我记得发生的事情打了这个。我现在想不出其他的了,所有的想法都是非常有用的建议,谢谢!非常有用的建议,谢谢!