これはすでに質問されていることは知っていますが、開発者が提案することはほぼすべて行いました。
<DataGrid x:Name="Imported" VerticalAlignment="Top" DataContext="{Binding Source=list}" AutoGenerateColumns="False" CanUserResizeColumns="True">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding Path=ID}"/>
<DataGridTextColumn Header="Date" Binding="{Binding Path=Date}"/>
</DataGrid.Columns>
</DataGrid>
これをモーダルダイアログボックスに表示して、モーダルダイアログボックスのコンストラクターにライセンスリストを追加しようとしています。しかし、データグリッド内にはまだ何も取り込まれていません。
コンストラクターコード:
public diagboxclass()
{
List<object> list = new List<object>();
list = GetObjectList();
}
public class object
{
string id;
DateTime date;
public string ID
{
get { return id; }
set { id = value; }
}
public DateTime Date
{
get { return date; }
set { date = value; }
}
}
オブジェクトリストに何か関係があると思いますか?
クラス名としてobjectを使用しないでください:
public class MyObject //better to choose an appropriate name
{
string id;
DateTime date;
public string ID
{
get { return id; }
set { id = value; }
}
public DateTime Date
{
get { return date; }
set { date = value; }
}
}
このクラスにはINotifyPropertyChanged
を実装する必要があり、もちろんProperty setterで呼び出しますです。それ以外の場合、変更はUIに反映されません。
Viewmodelクラス/ダイアログボックスクラスにはaProperty
のMyObject
リストが必要です。 ObservableCollection<MyObject>
は行く方法です:
public ObservableCollection<MyObject> MyList
{
get...
set...
}
xaml
で、Itemssource
をMyObject
のコレクションに設定する必要があります。 (Datacontext
はダイアログボックスクラスでなければなりません!)
<DataGrid ItemsSource="{Binding Source=MyList}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
<DataGridTextColumn Header="Date" Binding="{Binding Date}"/>
</DataGrid.Columns>
</DataGrid>
上記のオブジェクトリストを見ることなく、DataGridのItemsSource
プロパティではなく、DataContext
プロパティにバインドする必要があると思います。
<DataGrid x:Name="Imported" VerticalAlignment="Top" ItemsSource="{Binding Source=list}" AutoGenerateColumns="False" CanUserResizeColumns="True">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
<DataGridTextColumn Header="Date" Binding="{Binding Date}"/>
</DataGrid.Columns>
</DataGrid>
(これは、DataGridを含む要素[UserControlなど]がlist
コレクションを含むオブジェクトにバインドされたits DataContextを持っていることを前提としています。DataGridはItemsControl
は、ItemsSource
プロパティに依存して、行をバインドするコレクションを定義します。したがって、list
がコントロールのDataContextにバインドされたオブジェクトのプロパティではない場合、両方を設定するDataContext={Binding list}
およびItemsSource={Binding list}
DataGridで...)
背後のコードでこれを試してみてください
public diagboxclass()
{
List<object> list = new List<object>();
list = GetObjectList();
Imported.ItemsSource = null;
Imported.ItemsSource = list;
}
また、Blindmeisが述べているように、リストが効果的に設定されていることを確認し、c#で既に関数が与えられている単語を使用しないでください。