おはよう。カスタム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が言ったこと。さらに、もう1つの重要なことは、コレクション(myList)へのバインディングに、このプロパティの値が変更されたことが通知されていないことです(ObservableCollectionオブジェクトをこのプロパティに割り当てたこと)。したがって、あなたは何の効果も見ません。 – elgonzo
ObservableCollectionプロパティを宣言して初期化するViewModelクラスを作成することをお勧めします。 ViewModelクラスをDataContextとして使用します。 ViewModelクラスのための 'INotifyPropertyChanged'インタフェースに印をつけてください。 ViewModelのすべてのプロパティの設定ツールで、PropertyChangedイベントを発生させます。この方法でバインディングは、プロパティが変更されるたびに通知されます。 – elgonzo