2011-08-02 19 views
0

が、私はメモ帳に、(VSとコンピュータとの温度。問題)私はTitleプロパティを持つクラスMovieを持ってリストボックスに新しいアイテムを追加するWPF

をこのを入力申し訳ありませんが、私は

を持っています
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はtemp値で初期化されました。最後は"New"です。
コンストラクタで、私はmovielistを繰り返し、リストボックスに項目を入れました。 MainWindow.xaml

lb1.Items.Add(m) 

私は

<Grid Name="moviePage" > 
    <ListBox Name="lb1" SelectionChanged="SelectMovie"> 
</Grid> 

を持って、私はそれを使用している間、私はリストを修正していますように、このアプローチが間違っていることを認識してんだけど、私はように見えることはできませんこれを回避する方法を見つける。

リストボックスにムービーがたくさん表示され、「新規」がリストから選択されている場合は、新しいムービーを追加することができます。

+1

あなたの質問がありますか?あなたのコードは動作しませんか? –

+0

これを行う方法はエラーを引き起こさないでしょう。私はそれを繰り返している間、私は配列にものを追加することができないことを示すエラーを取得していた。私の広告。 VSは今問題があるので、私はちょうど私が起こっていた覚えているものを使用してこれを入力しました。私は今何か他のことを考えることができない、すべてのアイデアは高く評価されています – heyNow

答えて

4

は、ここで作業コードサンプルです:

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

は、私は、これはあなたがやっている何のために適切なアプローチであるとは考えていない、と述べました。リストボックスのテンプレートを変更して、バインドされているアイテムのリストを表示し、リストの外にある「新規」ボタンまたはリンクを表示する方が良いと思います。だから今は、新しいムービーを作成するためのボタンが含まれ、リストボックスを持って

<ListBox x:Name="lb1" DisplayMemberPath="Name" SelectionChanged="SelectMovie"> 
    <ListBox.Template> 
     <ControlTemplate> 
      <StackPanel> 
       <ItemsPresenter /> 
       <Button Click="AddMovie>New Movie</Button> 
      </StackPanel> 
     </ControlTemplate> 
    </ListBox.Template> 
</ListBox> 

はここで非常に簡単な例です。 AddMovieイベントハンドラでは、新しいMovieインスタンスをリストに追加して選択することができます。

+0

かなり助けていただきありがとうございました! – heyNow

関連する問題