WPF DataGrid: Как Вы получаете содержание отдельной ячейки?

Одно преимущество для второго метода состоит в том, что можно перенести его с Collections.unmodifiableMap(), чтобы гарантировать, что ничто не собирается обновить набор позже:

private static final Map<Integer, String> CONSTANT_MAP = 
    Collections.unmodifiableMap(new HashMap<Integer, String>() {{ 
        put(1, "one");
        put(2, "two");
    }});

 // later on...

 CONSTANT_MAP.put(3, "three"); // going to throw an exception!
6
задан Partial 18 August 2009 в 19:57
поделиться

3 ответа

Следуя тому, что сказал Филипп, DataGrid обычно привязан к данным. Ниже приведен пример, в котором мой WPF DataGrid привязан к ObservableCollection , где PersonName состоит из FirstName и LastName (обе строки).

DataGrid поддерживает автоматическое создание столбцов, поэтому пример довольно прост. Вы увидите, что я могу получить доступ к строкам по их индексу и получить значение ячейки в этой строке, используя имя свойства, соответствующее имени столбца.

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            // Create a new collection of 4 names.
            NameList n = new NameList();

            // Bind the grid to the list of names.
            dataGrid1.ItemsSource = n;

            // Get the first person by its row index.
            PersonName firstPerson = (PersonName) dataGrid1.Items.GetItemAt(0);

            // Access the columns using property names.
            Debug.WriteLine(firstPerson.FirstName);

        }
    }

    public class NameList : ObservableCollection<PersonName>
    {
        public NameList() : base()
        {
            Add(new PersonName("Willa", "Cather"));
            Add(new PersonName("Isak", "Dinesen"));
            Add(new PersonName("Victor", "Hugo"));
            Add(new PersonName("Jules", "Verne"));
        }
    }

    public class PersonName
    {
        private string firstName;
        private string lastName;

        public PersonName(string first, string last)
        {
            this.firstName = first;
            this.lastName = last;
        }

        public string FirstName
        {
            get { return firstName; }
            set { firstName = value; }
        }

        public string LastName
        {
            get { return lastName; }
            set { lastName = value; }
        }
    }
}
6
ответ дан 16 December 2019 в 21:44
поделиться

Обычно содержимое ячейки DataGrid привязано к данным и, следовательно, отражает состояние свойства (в большинстве случаев) объекта, отображаемого в данной строке. Следовательно может быть проще получить доступ к модели, чем к представлению.

Сказав это (модель доступа, а не представление), мой вопрос: что вы пытаетесь сделать? Вы ищете способы обхода визуального дерева , чтобы найти элемент управления (или элементы управления), отображаемый на экране? Как вы собираетесь ссылаться на ячейку по индексу строки и столбца?

1
ответ дан 16 December 2019 в 21:44
поделиться

Если вы выполняете привязку с использованием DataTable, вы можете получить DataRowView из свойства элемента строки.

DataRowView rowView = e.Row.Item as DataRowView;
1
ответ дан 16 December 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: