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!