我在将List绑定到DataGrid时遇到了麻烦。应该尽可能简单。我是WPF的新手,这是为了个人学习。
我有一个视图(Editor),一个视图模型(VMText)和一个数据(JustText)类。
到目前为止我的代码:
JustText.cs
namespace Model
{
public class Text
{
private string _code;
public string Code
{
get { return _code; }
set { _code = value; }
}
public Text()
{
_code = "Hello World!\nHow you doin'?";
}
}
}
VMText.cs
namespace ViewModel
{
public class VMText
{
private Model.Text _code;
public List<string> Code
{
get { return new List<string>(_code.Code.Split('\n')); }
set { _code.Code = System.String.Join("\n", value.ToArray()); }
}
private View.Editor editor;
public VMText(View.Editor editor)
{
_code = new Model.Text();
this.editor = editor;
}
}
}
Editor.xaml
<Window x:Class="View.Editor"
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:local="clr-namespace:View"
mc:Ignorable="d"
Title="Editor" Height="240.024" Width="269.895">
<Grid Background="#FF292929" Margin="0,0,-6.8,0.4">
<DataGrid x:Name="dataGrid"
HorizontalAlignment="Left"
Margin="0,0,0,0"
VerticalAlignment="Top"
Width="200pt"
Height="100pt"
DataContext="{Binding vmText}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Code, UpdateSourceTrigger=PropertyChanged}" Foreground="Black" Width="60" Header="Test" IsReadOnly="false" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
Editor.xaml.cs
namespace View
{
public partial class Editor : Window
{
private ViewModel.VMText vmText;
#region Constructor
public Editor()
{
InitializeComponent();
vmText = new ViewModel.VMText(this);
DataContext = vmText;
}
#endregion
}
}
我只想在DataGrid中的一列中显示在VMText中创建的List。
public List<string> Code {...}
is you collection of data for DataGrid, so Bind it in<DataGrid x:Name="dataGrid" ... ItemsSource="{Binding Code}">
- Dawid WekwejtItemsSource="{Binding Code}"
。不要在网格上设置DataContext
;它会从视图中继承。ItemsSource
绑定不会替换Code
;它将编辑Code
中的项目,这在你编写的方式中是不可能的。使用你拥有的视图模型,你只能显示Code
中的项目。所以Code
需要改变:它必须是一个可观察的类集合,该类具有网格可以编辑的属性。