C#, WPF, binden List<string> an die DataGrid -

Ich Probleme habe, Sie zu binden eine Liste an ein DataGrid. Es sollte so einfach wie möglich. Ich bin neu in WPF und das ist für meine persönliche Bildung.

Ich habe eine Ansicht(Editor),ViewModel(VMText) und Daten(JustText) Klasse.

Meine Quelle so weit:

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

Ich will einfach nur, um zu zeigen, Liste die erstellt wird, in VMText in einer Spalte im DataGrid

  • Sieht aus wie Sie benötigen, um die ItemsSource-Eigenschaft auf dem DataGrid.
  • public List<string> Code {...} ist Sie die Sammlung von Daten für die DataGrid -, so Binden Sie es in <DataGrid x:Name="dataGrid" ... ItemsSource="{Binding Code}">
  • 1) ItemsSource="{Binding Code}". Nicht DataContext auf das Gitter überhaupt; es erbt, das aus der Sicht. 2), Dass ItemsSource Bindung nicht ersetzen Code; es werde Bearbeiten Sie die Elemente in Code,, die passiert werden unmöglich, die Art und Weise, die Sie geschrieben haben es. Mit dem viewmodel, dass Sie haben, alles, was Sie tun können, ist, die Elemente anzuzeigen, die in Code. So Code ändern muss: Es muss eine ObservableCollection von einer Klasse, die eine Eigenschaft der raster Bearbeiten können.
InformationsquelleAutor dipa2016 | 2016-12-29
Schreibe einen Kommentar