当我单击表单中的某个按钮并在显示的Textbox
中输入一个字符串时,我需要它来创建一个带有该字符串名称的新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
字符串被拆分,每个字符在表单上显示为新集合(我们假设),而不是标题是一个集合。 - 应该有多个带有多个集合的标题,每个标题都有自己的集合。标题应该是一个单词,而不是分成单个字符。
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);
}
将ItemsSource
绑定到NewTitle
属性的表单上的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>
编辑:
这就是它的样子,它应该在集合中显示为一个字符串。
答案 0 :(得分: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);
}
确保将ViewModel中的集合类型更改为
ObservableCollection<YourTitleClass>
现在,当您添加“副标题”(或此子集合所代表的任何内容)时,您将其添加到YourTitleClass.Subtitles。如果您使用的是对象的父级别,则为YourTitleClass.Title。