2012-03-05 104 views
0

在我當前的場景(WPF,MVVM)中,我有一個託管Visio圖的用戶控件。此用戶控件位於視圖上,位於多個標籤和數據網格元素旁邊。檢索綁定到元素值的標籤的值

用戶控件包含值與從Visio圖表接收到的信息來更新一個DependencyProperty對象SelectedNode。該標籤的內容進行綁定,使它們顯示包含在SelectedNode(例如ID,姓名)的信息:

<Label Grid.Row="1" Grid.Column="1" x:Name="lbNodeIdValue" HorizontalAlignment="Left" 
              Content="{Binding ElementName=visioControlUC, Path=SelectedNode.Id, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"/> 

我每次更改圖表中的選擇,標籤的內容變化的預期。

接着這個標籤,我想顯示基於顯示在標籤中的ID的數據網格包含的信息。這是我遇到問題的地方,因爲我似乎無法獲得viewmodel類中標籤的Content屬性的值。

我已經使用標籤的Content元件上的MultiBinding屬性嘗試,並創建第二與Mode=OneWayToSource結合所述標記的Content的值設置到我在視圖模型類中定義的屬性。

在我的viewmodel類中檢索這個值的正確方法是什麼?

感謝, 阿德里安

回答

1

理想的情況下你的DataGrid的ViewModel應該從其他ViewModel獲得所選標籤的值。您不應該依靠ViewsViewModels之間傳輸應用程序數據。

這聽起來像SelectedNode值從UserControl起源,而不是ViewModel,所以你需要綁定UserControl.SelectedNodeIdViewModel地方所以的ViewModels訪問該數據

<local:myUserControl x:Name="visioControlUC" 
        SelectedNode="{Binding SelectedNodeId}" /> 

如果值需要多於一個ViewModel,我會強烈推薦某種事件系統,例如MVVM Light的Messenger或Prism的EventAggregator。這將允許您ViewModels訂閱有點像SelectedNodeChangedEventMessage,而這實際上包含了SelectedNodeId可以播出消息隨時變化值的ViewModel。您可以在我的博客文章中找到有關Communication between ViewModels的兩個示例。

+0

Yeap,就是這樣..我不想在用戶控件中設置任何東西,但我使用了你的建議,它的工作原理。 非常感謝:) – Adrian 2012-03-05 14:23:15