안녕하십니까.사용자 정의 DataGrid의 ItemsSource 만들기 - 작동하지 않습니다.
Create a custom DataGrid's ItemsSource에서 솔루션을 복제하려고하는데 행이 채워지지 않습니다.
열은 올바른 머리글과 함께 표시되지만 눈금에는 데이터가 표시되지 않습니다.
저는 WPF와 XAML에서 새로운 사람이라면 누구나 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까?
using System;
using System.Windows;
using System.ComponentModel;
using System.Collections.ObjectModel;
using System.Runtime.CompilerServices;
namespace WPFBindingDataGridTest2
{
public partial class MainWindow : Window
{
public ObservableCollection<MyObject> myList { get; set; }
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
testClass = new ObservableCollection<TestClass>();
testClass.Add(new TestClass(NameValue: "John"));
testClass.Add(new TestClass(NameValue: "Frank"));
testClass.Add(new TestClass(NameValue: "Sarah"));
testClass.Add(new TestClass(NameValue: "David"));
}
}
class TestClass : INotifyPropertyChanged
{
private string name;
public TestClass(string NameValue)
{
this.Name = NameValue;
}
public String Name
{
get { return name; }
set { this.name = value; NotifyPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
그리고 XAML
...<Grid>
<DataGrid x:Name="dataGrid" ItemsSource="{Binding testClass}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
내가 점점 오전 오류가 나는 이것에 너무 가까이 나는 것 같은 느낌,하지만 한 가지를 놓치고
System.Windows.Data Error: 40 :
BindingExpression path error:
'testClass' property not found on 'object'''MainWindow'
(Name='')'.BindingExpression:
Path=testClass;
DataItem='MainWindow' (Name='');
target element is 'DataGrid' (Name='dataGrid');
target property is 'ItemsSource' (type 'IEnumerable')
입니다.
데이터 컨텍스트가 잘못되었을 수 있습니까?
속성 이름은 대소 문자를 구분합니다. 바인딩에서 MyId를 MyID로 변경하십시오. 출력 창에 바인딩 오류가 있어야합니다. – Yevgeniy
예브게니 (Yevgeniy)의 말. 그러나 또 다른 중요한 점은 컬렉션 (myList)에 대한 바인딩에이 속성의 값이 변경되었음을 알리는 것 (즉, ObservableCollection 객체를이 속성에 할당 한 경우)입니다. 따라서 어떤 효과도 보이지 않습니다. – elgonzo
ObservableCollection 속성을 선언하고 초기화하는 ViewModel 클래스를 만드는 것이 좋습니다. ViewModel 클래스를 DataContext로 사용하십시오. ViewModel 클래스의'INotifyPropertyChanged' 인터페이스에 임 플린팅하십시오. ViewModel의 모든 속성에 대한 설정자에서 PropertyChanged 이벤트를 발생시킵니다. 이런 식으로 바인딩은 변경 될 바인딩 된 속성이있을 때마다 알려줍니다. – elgonzo