我有一个场景,我希望能够在 UI 中收集字符串数组...视图模型不应该关心如何收集字符串...并将该字符串数组传递给视图模型。
是否有一个 WPF 控件可以绑定到字符串数组,但不需要它是 itemsSource?
我希望视图模型能够将数组作为一个整体进行处理。 这看起来应该是一件简单的事情,但我只是没有找到解决方案。 我正在考虑使用文本框,只是分隔字符串并在视图模型中将其分开。
想法?
谢谢。
J
这里是一个使用
Binding
和 string[]
的解决方案示例。主窗口 xaml:
<Window x:Class="SO_app.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:VM;assembly=VM"
xmlns:local="clr-namespace:SO_app"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<vm:MainViewModel/>
</Window.DataContext>
<Grid>
<ListView ItemsSource="{Binding Items}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding .}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Window>
现在是 ViewModel(基础):
namespace VM
{
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string prop)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
}
}
现在是主视图模型:
namespace VM
{
public class MainViewModel : BaseViewModel
{
public MainViewModel()
{
Items = new string[10];
Items[0] = "First string";
Items[1] = "Second string";
}
private string[] _items;
public string[] Items
{
get { return _items; }
set { _items = value; OnPropertyChanged("Items"); }
}
}
}
这样您的
Binding
就可以工作,并且您将可以访问视图模型中的集合。
假设
Binding
有实际的理解。