이 문제로 많은 어려움을 겪어 왔지만 많은 것을 읽었지만 대부분의 예제는 너무 간단합니다. 아주 간단한 ObservableCollection을 DataGrid에 바인딩하려고합니다.WPF 개체 소스를 사용한 데이터 바인딩이 업데이트되지 않습니다.
public class SingleItem {
private String _name=null;
public String Name {
get { return _name; }
set { _name=value; }
}
public SingleItem(String name) {
Name=name;
}
클래스 ManyItems이 컬렉션 호스팅하고 다음과 같이 정의된다 : 컬렉션 내에서 슈퍼 간단한 개체는 다음과 같이 정의된다 "SingleItems"입니다 내 기본 창에서
public class ManyItems{
private ObservableCollection<SingleItem> allItems=new ObservableCollection<SingleItem>();
public ManyItems() {
AllItems.Add(new SingleItem("inside"));//debug code
}
public ObservableCollection<SingleItem> AllItems {
get { return allItems; }
set { allItems=value; }
}
public void AddItem(SingleItem item) {
AllItems.Add(item);
}
}
을 나는 단지
public partial class MainWindow : Window{
int count=0;
ManyItems _items=new ManyItems();
public ManyItems Items {
get { return _items; }
set { _items=value; }
}
public MainWindow(){
this.InitializeComponent();
}
private void Button_Click(object sender, System.Windows.RoutedEventArgs e){
Items.AddItem(new SingleItem("name_"+count));
count++;
}
}
: 사용자가 버튼을 누를 때 ManyItems를 업데이트 할마지막으로 내 XAML은 (단축 여기서 "...")과 같습니다
<Window
...
xmlns:local="clr-namespace:DataGridTEst"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:XamlGeneratedNamespace="clr-namespace:XamlGeneratedNamespace" mc:Ignorable="d"
x:Class="DataGridTEst.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Window.Resources>
<local:ManyItems x:Key="ManyItemsDataSource" d:IsDataSource="True"/>
</Window.Resources>
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource ManyItemsDataSource}}">
<Button Content="Button" .... Click="Button_Click"/>
<DataGrid ... ItemsSource="{Binding AllItems}"/>
</Grid>
나는이 응용 프로그램을 실행하면, 그리드 내가 생성자에서 만든 "내부"를 SingleItem을 보여줍니다
. 그러나 기본 컬렉션에 대한 변경 사항은 DataGrid에 반영되지 않습니다. INotifyPropertyChanged를 사용하려고했지만 성공하지는 못했습니다. 나는 내 이해에 심각한 오류가 있다고 생각한다. 아무도 내가 잘못하고있는 것을 설명 할 수 있습니까? 또한 온라인 예제 (모든 것이 생성자 내부에서 수행되는 것은 아닙니다)가 크게 감사하겠습니다. 당신의 도움에 대한감사합니다, 세바스찬
켄트 :-) 다시 궤도에 저를 얻을 완벽했다 :이 슈퍼 빠른 답변을 주셔서 대단히 감사합니다. 나는 나의 책상에서 1 ~ 2 일간 떨어져있을 것이다. 그러나 나의 복귀 후 그것을 시도 할 것이다. – bash74
켄트 : 나는 당신의 해결책을 시도 할 기회를 가졌습니다. 그것은 완벽하게 작동합니다. 고맙습니다. 이제 Blend (xaml을 만든)에서 이러한 것들을 정의하는 방법을 알아 내면됩니다. – bash74