簡體   English   中英

WPF MVVM 在命令實現中訪問綁定到子視圖的項目

[英]WPF MVVM accessing item bound to child view in Command implementation

嗨,我在這里的一個線程中實現了我在WPF MVVM Master 詳細視圖中詢問的內容,其中包含數據網格和 TabControl

它是一個主細節視圖,其中數據網格作為主視圖,TabControl 作為子視圖。 網格的 SelectedItem 綁定到 TabControl 的 ItemsSource。

如何訪問在視圖模型中編寫的命令中綁定到 TabControl 的項目? 基本上我想在綁定集合中添加新項目(給孩子)。 但是綁定的項目是數據網格的 selectedItem - 我如何找到它是哪一個。

了解有關您嘗試開始工作的命令的一些詳細信息會有所幫助,但您應該能夠將您正在使用的任何控件上的 CommandParameter 綁定到您用於 TabControl 的相同 DataGrid.SelectedItem 屬性項目來源。 然后,您應該可以使用該 CommandParameter 作為命令處理程序的參數(根據您使用的 ICommand 實現可能會有所不同 - DelegateCommand、RelayCommand 等)。

不要將控件直接連接在一起,而是在視圖模型中引入某種代理屬性,這兩個控件都綁定到。 其中之一是 Mode=TwoWay。

您可以使用 CollectionViewSource.GetDefaultView() 返回 TabControl 綁定到的 ICollectionView。 如果在 TabControl 上將 IsSynchronizedWithCurrentItem 設置為 true,則 ICollectionView 的 Current 屬性將是您可以傳遞給命令的內容

您的 ViewModel 中需要一個名為 SelectedCause 的屬性。 將 DataGrid 的 SelectedItem 屬性綁定到此 SelectedCause 屬性。 然后,不是將 TabControl 綁定到 SelectedItem.Solutions,而是將其綁定到 SelectCause.Solutions。 由於您遇到的問題,最好這樣做。 您需要 ViewModel 中的一個屬性來表示當前選定的原因。 ViewModel 旨在代表視圖的 state。 DataGrid 中的選定項是 state 的一部分,因此您的 ViewModel 中應該有一個 SelectedCause 屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM