Foreach treeview-item私は独自のデータグリッドを持っています。ツリービューのアイテムとデータグリッドは、バインディングで埋められます。複数のデータグリッドのSelectedItemを取得するには?
テキストボックスでは、データグリッドの選択項目にバインドされています。しかし、これらのテキストボックスへのバインドは、最初のDataGridでのみ機能します。
<TextBox Text="{Binding PlaceList/SelectedMachine.Name, ValidatesOnDataErrors=True}" />
I:他のすべてのデータグリッドは、テキストボックスにのSelectedItemを転送しません:
は、データグリッドとツリービューで:テキストボックスここ
<TreeView ItemsSource="{Binding Path=PlaceList}">
<TreeView.ItemTemplate>
<DataTemplate>
<TreeViewItem Header="{Binding Path=Name}">
<DataGrid ItemsSource="{Binding MachinesInPlace, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectionUnit="FullRow"
SelectedItem="{Binding SelectedMachine, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="True"
IsSynchronizedWithCurrentItem="True"
SelectionMode="Single">
</DataGrid>
</TreeViewItem>
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
ですMvvmLightで作業しています。
public ObservableCollection<PlaceModel> PlaceList { get; set; } = new ObservableCollection<PlaceModel>();
public ObjectInspectorViewModel()
{
PlaceList = PlaceModel.GetPlaces(BaseResourcePaths.PlacesCsv);
}
私の場所、モデルS:私のViewModelはPlaceListを保持している
public class PlaceModel
{
public int Id { get; set; }
public string Name { get; set; } = "_CurrentObjectName";
public string Length { get; set; }
public string Width { get; set; }
public string Height { get; set; }
public ObservableCollection<MachineModel> MachinesInPlace { get; set; }
public MachineModel SelectedMachine { get; set; }
public static ObservableCollection<PlaceModel> GetPlaces(string filepath)
{
[...]
}
}
私は何かを試してみたが、最後に、私はバグを修正する方法を知りません。どうしたの?私の提案は、プレースモデル内のプロパティ "SelectedMachine"です...
ここでは、Sebastian Richterの追加ソリューションを使用したサンプルプロジェクトを示します。 https://www.file-upload.net/download-12370581/DatagridTreeViewError.zip.html
TreeviewでSelectedItemが必要なのではなく、それに基づいてテキストボックスへのバインディングを行いますか?それ以外の場合、バインディングは最初のインスタンスを取得しているだけで、ツリービューの選択時には更新されません。 – Josh
あなたの返事のためのThx。私はウルの解決策を試みたが、それは仕事をしなかった。私はhttp://stackoverflow.com/a/3535089のようにSelectedItemプロパティを使ってtreeviewコントロールを拡張しなければなりませんでした。私は次のXAMLで終わった:http://pastebin.com/VVgBtCqR問題は、ツリービューは、場所の完全なリストを保持し、各場所では、異なる(データグリッド)マシンのリストです。だから、treeview - select私はどのplace-listが選択されたかを知ることができますが、それらのplace-list内のどのマシンが選択されるのかはわかりません。または私は間違っていますか? – Chpo7234