Cześć,

otrzymuję błąd:

Error 1 An object reference is required for the non-static field, method, or property 'WpfTest.MainWindow.dgrMojeStruktury' H:\Projekty\WpfTest\WpfTest\MainWindow.xaml.cs 58 4 WpfTest

w momencie, gdy próbuję dostać się do swojego DataGrid z poziomu kodu w MainWindow(). Próbowałem podążać za tymi tutorialami: http://www.altcontroldelete.pl/artykuly/wpf-tutorial-bindowanie/ oraz http://wpftutorial.net/DataGrid.html

Wynika z niego, że potrzebuję referencji do obiektu, którym jest DataGrid (zdefiniowany w MainWindow.xaml). Nie jest on widoczny z poziomu MainWindow.xaml.cs. Dlaczego i jak się tego pozbyć?

Napisałem krótki program, który ma na celu tylko zilustrowanie problemu. Pokazuję go poniżej:

MainWindow.xaml

<Window x:Class="WpfTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
		<DataGrid Margin="5" Grid.ColumnSpan="3" Name="dgrMojeStruktury" ItemsSource="{Binding MojaKlasa}">
			<DataGrid.Columns>
				<DataGridTextColumn Header="Parameter name" Binding="{Binding MojaKlasa.parameterName}" />
				<DataGridTextColumn Header="Min value" Binding="{Binding MojaKlasa.minValue}" />
			</DataGrid.Columns>
		</DataGrid>
	</Grid>
</Window>

MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfTest
{
	/// <summary>
	/// Interaction logic for MainWindow.xaml
	/// </summary>
	public partial class MainWindow : Window
	{
		struct MojaStruktura
		{
			public string parameterName;
			public Single minValue;
			//public Single stepValue;
			//public Single maxValue;
		};

		class MojaKlasa
		{
			public string Tekst { get; set; }
			public List<MojaStruktura> MojeStruktury { get; set; }
			public MojaKlasa()
			{
				MojeStruktury = new List<MojaStruktura>();
			}
		}

		public MainWindow()
		{
			InitializeComponent();

			MojaKlasa myMojaKlasa = new MojaKlasa();
			myMojaKlasa.Tekst = "a";
			// first element in the list
			MojaStruktura mojaStruktura = new MojaStruktura();
			mojaStruktura.parameterName = "nazwa";
			mojaStruktura.minValue = 10;
			myMojaKlasa.MojeStruktury.Add(mojaStruktura);
			// second element in the list
			MojaStruktura mojaStruktura2 = new MojaStruktura();
			mojaStruktura2.parameterName = "nazwa2";
			mojaStruktura.minValue = 15;
			myMojaKlasa.MojeStruktury.Add(mojaStruktura2);

			// create binding of myMojaKlasa object to DataGrid dgrMojeStruktury from MainWindow
			MainWindow.dgrMojeStruktury.ItemsSource = myMojaKlasa; // tutaj jest błąd !!!
		}
	}
}

Projekt również w załączniku.

Pozdrawiam!