まずは新しくWPFの学習を始めました。WPFのエキスパンダーでlistviewを使用するとバインディングが機能しない
以下に示すように、私は、従業員クラスを持っている:
public class Employee : INotifyPropertyChanged
{
public Employee()
{
_subEmployee = new ObservableCollection<Employee>();
}
private string _name;
public ObservableCollection<Employee> SubEmployee
{
get { return _subEmployee; }
set
{
_subEmployee = value;
NotifiyPropertyChanged("SubEmployee");
}
}
public string Name
{
get { return _name; }
set
{
_name = value;
NotifiyPropertyChanged("Name");
}
}
ObservableCollection<Employee> _subEmployee;
public event PropertyChangedEventHandler PropertyChanged;
void NotifiyPropertyChanged(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
私はメインウィンドウクラスで従業員の監視可能なコレクションを作成し、以下に示すように、同じコレクションにDataContextのを設定している:
public partial class MainWindow : Window
{
public ObservableCollection<Employee> Emp { get; private set; }
public MainWindow()
{
InitializeComponent();
Emp = new ObservableCollection<Employee>();
Emp.Add(new Employee(){Name = "Anuj"});
Emp.Add(new Employee() { Name = "Deepak" });
Emp.Add(new Employee() { Name = "Aarti" });
Emp[0].SubEmployee.Add(new Employee(){Name = "Tonu"});
Emp[0].SubEmployee.Add(new Employee() { Name = "Monu" });
Emp[0].SubEmployee.Add(new Employee() { Name = "Sonu" });
Emp[2].SubEmployee.Add(new Employee() { Name = "Harsh" });
Emp[2].SubEmployee.Add(new Employee() { Name = "Rahul" });
Emp[2].SubEmployee.Add(new Employee() { Name = "Sachin" });
this.DataContext = Emp;
}
}
さて、xaml.csでは以下のコードを書いています:
<Grid>
<ListView ItemsSource="{Binding Emp}">
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type vm:Employee }">
<Expander Header="{Binding Name}">
<ListView ItemsSource="{Binding SubEmployee}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text ="{Binding Name}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Expander>
</DataTemplate>
</ListView.ItemTemplate> >
</ListView>
</Grid>
今私はエキスパンダーボタンでEmployeeオブジェクトのコレクションを取得する必要があります。ボタンをクリックすると、すべてのSubEmployeeが表示されます。しかし、残念ながら私は期待された結果を得ていません。
バインディングの問題を解決するのを手伝ってください。あなたのDataContext
私はdataContextをthis.DataContext = thisに変更しました。コードを実行しているときに、コールスタックに「無効な操作例外が処理されませんでした」という外部コードのみが含まれているというエラーが表示されます。 –