Foreach treeview-item我有一個自己的數據網格。 Treeview-items和datagrids是通過綁定來填充的。如何獲取多個數據網格的SelectedItem?
在文本框上我綁定了選定的數據網格項。但是對這些文本框的綁定僅適用於第一個數據網格。每隔數據網格並在將selectedItem不會轉移到文本框:
這裏是與DataGrid樹視圖:
<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>
這裏是文本框:
<TextBox Text="{Binding PlaceList/SelectedMachine.Name, ValidatesOnDataErrors=True}" />
我我正在與MvvmLight合作。我的視圖模型持有PlaceList:
public ObservableCollection<PlaceModel> PlaceList { get; set; } = new ObservableCollection<PlaceModel>();
public ObjectInspectorViewModel()
{
PlaceList = PlaceModel.GetPlaces(BaseResourcePaths.PlacesCsv);
}
這是我的地方的模型:
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)
{
[...]
}
}
我想出來的東西,但最後我不知道如何解決的bug。有什麼問題?我的建議是位置模型內的屬性'SelectedMachine'...
這是一個示例項目(帶有Sebastian Richter的附加解決方案)。它顯示了以下問題:https://www.file-upload.net/download-12370581/DatagridTreeViewError.zip.html
難道你不需要樹視圖上的SelectedItem,然後根據它做你的綁定到文本框?否則,綁定僅抓取第一個實例,並且在進行樹視圖選擇時不會更新。 – Josh
Thx for your reply。我試過你的解決方案,但它沒有奏效。我不得不用http://stackoverflow.com/a/3535089上的SelectedItem屬性來擴展treeview控件。我結束了以下XAML:http://pastebin.com/VVgBtCqR問題是樹視圖擁有一個充滿地方的列表,並且在每個地方是一個不同的(datagrid)機器列表。所以在treeview-選擇我可以得到哪個地點列表被選中,但我不能得到那些地方列表中選擇哪臺機器。或者我錯了? – Chpo7234