snziv Ответов: 1

Привязка в XAML работает только для свойств, а не для полей


I tried Binding in XAML, while binding i encountered this issue

<pre lang="c#">

public class StudentsCollectionViewModal
    {
        public List<Author> studentCollection 

       = new List<Author>();

        public StudentsCollectionViewModal()
        {
            studentCollection = LoadCollectionData();
        }
        private List<Author> LoadCollectionData()
        {
            List<Author> authors = new List<Author>();
            authors.Add(new Author()
            {
                ID = 101,
                Name = "Mahesh Chand",
                BookTitle = "Graphics Programming with GDI+",
                DOB = new DateTime(1975, 2, 23),
                IsMVP = false
            });
            authors.Add(new Author()
            {
                ID = 201,
                Name = "Mike Gold",
                BookTitle = "Programming C#",
                DOB = new DateTime(1982, 4, 12),
                IsMVP = true
            });
            authors.Add(new Author()
            {
                ID = 244,
                Name = "Mathew Cochran",
                BookTitle = "LINQ in Vista",
                DOB = new DateTime(1985, 9, 11),
                IsMVP = true
            });
            return authors;
        }
        public class Author
        {
            public int ID { get; set; }
            public string Name { get; set; }
            public DateTime DOB { get; set; }
            public string BookTitle { get; set; }
            public bool IsMVP { get; set; }
        }
    }
}


вот код XAML, где я попробовал привязку
<UserControl.DataContext>
        <viewModal:StudentsCollectionViewModal></viewModal:StudentsCollectionViewModal>
    </UserControl.DataContext>
    <Grid Background="SkyBlue">
        <DataGrid Margin="10" x:Name="datagrid" ItemsSource="{Binding studentCollection}" RowBackground="LightYellow"
 AlternatingRowBackground="LightSkyBlue" AlternationCount="2" AllowDrop="True" >
        </DataGrid>       
    </Grid>


согласно моему ожиданию, привязка не сработала , но когда я изменил поле "studentCollection" на свойства
public List<Author> studentCollection 

       = new List<Author>();


к
private List<Author> _studentCollection;

       public List<Author> studentCollection
       {
           get { return _studentCollection; }
           set { _studentCollection = value; }
       }

это сработало.

весь модифицированный класс
public class StudentsCollectionViewModal
    {
        // public List<Author> studentCollection = new List<Author>();

        private List<Author> _studentCollection;

        public List<Author> studentCollection
        {
            get { return _studentCollection; }
            set { _studentCollection = value; }
        }

        public StudentsCollectionViewModal()
        {
            studentCollection = LoadCollectionData();
        }
        private List<Author> LoadCollectionData()
        {
            List<Author> authors = new List<Author>();
            authors.Add(new Author()
            {
                ID = 101,
                Name = "Mahesh Chand",
                BookTitle = "Graphics Programming with GDI+",
                DOB = new DateTime(1975, 2, 23),
                IsMVP = false
            });
            authors.Add(new Author()
            {
                ID = 201,
                Name = "Mike Gold",
                BookTitle = "Programming C#",
                DOB = new DateTime(1982, 4, 12),
                IsMVP = true
            });
            authors.Add(new Author()
            {
                ID = 244,
                Name = "Mathew Cochran",
                BookTitle = "LINQ in Vista",
                DOB = new DateTime(1985, 9, 11),
                IsMVP = true
            });
            return authors;
        }
        public class Author
        {
            public int ID { get; set; }
            public string Name { get; set; }
            public DateTime DOB { get; set; }
            public string BookTitle { get; set; }
            public bool IsMVP { get; set; }
        }
    }

Поэтому у меня этот запрос привязки в XAML работает только на свойствах, а не на полях.

Что я уже пробовал:

Я попробовал поискать в google, но не смог найти ни одной вмятины, поэтому попробовал разобраться в своем приложении XAML.

[no name]

"Я пробовал google, но не смог найти ни одного", - тогда вам нужно улучшить свои навыки google. Хорошо задокументировано, что привязка работает со свойствами, а не с полями.

1 Ответов

Рейтинг:
5

Richard Deeming

Нет, привязка не поддерживает поля:

Вы можете привязать к общедоступным свойствам, вложенным свойствам, а также индексаторам любой объект common language runtime (CLR).