2014-01-17 63 views
-1

當我從窗體中點擊一個按鈕並在顯示的Textbox中輸入一個字符串時,我需要它創建一個帶有該字符串名稱的新列表ObservableCollection列表。如何在按鈕上單擊添加新的ObservableCollection?

帶有字符串名稱的標籤將出現在窗體上。然後,我們爲該標籤創建了一個ContextMenu。從這裏你可以在你點擊的列表中添加另一個字符串。

這是保存按鈕的字符串:

private void btnSave_Click(object sender, RoutedEventArgs e) 
{ 
    string titleName = txtTitle.Text; 

    _viewmodel.RenameTitle(titleName); 
    _Addtitle.Execute(null); 
    this.Close(); 
} 

然後我們進入ViewModel類(TITLENAME是第一個字符串進入)。

public ICommand AddTitleCommand { get; set; } 

public ViewModel() 
{ 
    this.AddTitleCommand = new RelayCommand(new Action<object>((o) => OnAddTitle())); 
} 

private void OnAddTitle() 
{ 
    NewTitle += titleName; 
} 

OnAddTitle()方法和下面兩個問題出現的地方。 目前,titleName字符串被拆分,並且每個字符在窗體上顯示爲新集合(我們假設),而不是標題爲一個集合。 - 應該有多個標題與多個集合,每個標題都有自己的集合。標題應該是一個單詞,而不是分成單獨的字符。形式結合的ItemsSourceNewTitle財產上

public string NewTitle 
{ 
    get { return newTitle; } 
    set { newTitle = value; OnPropertyChanged(() => NewTitle); } 
} 

public void AddCollection() 
{ 
    ObservableCollection<string> collection = new ObservableCollection<string>(); 
    collection.Add(NewTitle); 
    Collections.Add(collection); 
} 

XAML代碼:

<StackPanel Name="Content" Margin="0,99,0,0"> 


     <TextBox x:Name="txtname" Height="23" TextWrapping="Wrap" Margin="200,0,500,0"/> 


     <ListView x:Name="TitleList" ItemsSource="{Binding NewTitle}" ItemTemplate="{DynamicResource Template}" BorderBrush="{x:Null}"> 
     </ListView> 
</StackPanel> 

編輯:

這是個什麼樣子,它應該顯示爲一個集合中的一個字符串。

enter image description here

+0

爲什麼會有每個標題的集合?當然你想要一個標題集合?你綁定到NewT​​itle,它是一個字符串。你想綁定到一個集合。 –

+0

@CharlesMager我們希望每個標題都有不同的集合,因爲每個標題下面都會有一組問題字符串。因此,標題將有自己的集合,但正如您經過有效評論,所有標題也可能是一個集合,但可以留待以後。 – user3157821

+0

@Sheridan最後一個問題沒有具體說明,代碼還不成熟。更不用說因爲這樣的帖子,答案與問題無關,這顯然是我們的錯誤。希望能夠澄清問題並解答您的問題。 – user3157821

回答

2

我強烈建議你繼續研究MVVM因爲你要改變你如何使用WPF。但我覺得在這裏你的問題是迴避的事實,當你真正需要的是這樣的事情,你使用的是

ObservableCollection<ObservableCollection<string>> 

public class YourTitleClass : INotifyPropertyChanged 
{ 
    private string _title; 
    public string Title 
    { 
     get { return _title; } 
     set 
     { 
      if (_title.Equals(value)) 
      return; 

      _title = value; 
      RaisePropertyChanged(() => Title); 
     } 
    } 

    private ICollection<string> _subtitles; 
    public ICollection<string> Subtitles 
    { 
     get 
     { 
      if (_subtitles == null) 
      _subtitles = new ObservableCollection<string>(); 
      return _subtitles; 
     } 
     set 
     { 
      if (value == _subtitles) 
      return; 

      _subtitles = value; 
      RaisePropertyChanged(() => Subtitles); 
     } 
    } 

    public YourTitleClass(string title) 
    { 
     _title = title; 
    }  
} 

然後你AddCollection方法需要添加這個類的一個實例到的ViewModels收集

public void AddCollection() 
{ 
    YourTitleClass newTitleClass = new YourTitleClass(NewTitle); 
    Collections.Add(newTitleClass); 
} 

確保在您的視圖模型改變的集合類型

ObservableCollection<YourTitleClass> 

現在,當您添加「字幕」(或任何此subcollection表示)時,您將它添加到YourTitleClass.Subtitles。如果您使用的是對象的父級別,則爲YourTitleClass.Title。

+0

感謝您的回答,但結果仍然相同,他們仍然是作爲單獨的字符出來。有任何想法嗎?我將添加一個它看起來像的編輯。 – user3157821

+0

這是因爲你正在將ListView綁定到一個字符串。它期待收集。在我的例子中,你應該將ListView綁定到Collections。 –

+0

現在我已經完成了,它不顯示標題,而是顯示「MVVModel.NewTitleClass」。 – user3157821

相關問題