亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 MainWindow 訪問頁面的 DataContext(使用 Telerik)

從 MainWindow 訪問頁面的 DataContext(使用 Telerik)

C#
墨色風雨 2021-12-25 16:17:50
我對 WPF 比較陌生,我偶然發現了一個我似乎無法找到解決方案的問題。我確信已經有一個線程涉及這樣的問題,但由于我缺乏知識,很可能我還沒有找到它或根本不理解它。我的問題:我正在用 C# 開發 WPF 應用程序。這是一個 Outlook 風格的應用程序,帶有一個帶有巨大 ViewModel 和 XAML 的大型 MainWindow。我試圖做的是將單個代碼文件分開一點,使其更加模塊化和緊湊。我正在使用 Telerik Controls 并嘗試將單個 SplitContainers 的內容外包到 Pages 中,直到現在它都運行良好。今天,出現了一個新情況,有點愚蠢,看起來也不太復雜,但不知何故我無法讓它發揮作用。情況:我的“MainWindow”中有一個 Treeview,每當我更改其中的選擇時,我都想更改已綁定到的頁面上的屬性。因此,當我單擊“TreeView_3”中的一個項目時,我想通過“Page_X”的 DataContext 上的 EventHandler (SelectionChanged_TreeView3) 設置一個屬性。如果我必須在 MainWindow 上執行此操作,我通常會這樣做:UserViewModel uvm = mainGrid.DataContext as UserViewModel;然后只需調用我想要訪問的特定 UserViewModel(MainWindow 的 ViewModel)的任何屬性。顯然,我不能以相同的方式為頁面執行此操作,因為“mainGrid.DataContext”將始終引用 MainWindow,因為這是調用 eventhandler 的地方。所以我需要的是關于如何從具有不同 ViewModel 的頁面訪問 DataContext 的一些解釋。如果您需要任何代碼來解釋,請告訴我。
查看完整描述

2 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

你需要分開你的顧慮。在您后面的代碼中,您應該只有處理視圖相關內容的代碼。大多數情況下,我的代碼隱藏是空的。


在您的 ViewModel 中,您應該處理與數據相關的邏輯。因此,不要在后面的代碼中投射數據上下文,而是Command在視圖模型中使用 a 處理單擊。


由于無法將命令綁定到SelectedItemChanged您的 ,因此TreeView您可以使用交互觸發器。


<TreeView xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">

    <i:Interaction.Triggers>

        <i:EventTrigger EventName="SelectedItemChanged">

            <i:InvokeCommandAction Command="{Binding Path=SomeCommand, Mode=OneWay}"/>

        </i:EventTrigger>

    </i:Interaction.Triggers>

</TreeView>


查看完整回答
反對 回復 2021-12-25
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

如果沒有一些示例代碼,Ruven 很難說。但可能是您需要在 ViewModel 上實現 INotifyPropertyChanged?

https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-implement-property-change-notification

通過調用 OnPropertyChanged("PropertyName"); 在 viewmodel 屬性的 setter 中,ui 將獲取更改。

還要確保兩個視圖都引用同一個對象,而不是同一個對象的副本。


查看完整回答
反對 回復 2021-12-25
  • 2 回答
  • 0 關注
  • 240 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號