2017-05-31 73 views
0

在WPF中得到的對象,我有一個列表框綁定到數據集,它看起來像:如何從綁定源

<ListBox x:Name="lb_Configuration" SelectionMode="Extended" Height="100" ItemsSource="{Binding Products}" SelectedItem="{Binding SelectedProduct}"> 

的的SelectedItem有像許多對象:ID ...

我怎麼能在後端代碼中得到這個值?我的想法是:

int myid; 
myid = lb_Configuration.SelectedItem.<what method?> 

或其他方式來達到我的目的?謝謝。

+0

什麼是_back結束code_?你的意思是你的UI的代碼隱藏?這將是一種錯誤的方式,您必須在視圖模型中管理數據,而不是在視圖中。 – dymanoid

+0

感謝您的回覆。我的意思是代碼隱藏。但是'myid'不是UI視圖對象,我只是想獲得它的價值計算過程 –

+0

如果你寫了一個綁定了'SelectedItem'屬性爲'SelectedProduct'財產,自然的問題是:哪裏是'SelectedProduct財產?在xaml.cs中?在ViewModel中? –

回答

0

使用as運營商只投了SelectedItem屬性的類型(Product或任何你的類被稱爲):

int myid; 
var item = lb_Configuration.SelectedItem as Product; 
if(item != null) 
    myid = item.Id; 

需要注意的是,因爲你綁定SelectedItem屬性設置爲SelectedProduct財產在你的視圖模型,你可以直接在視圖模型類,但是訪問SelectedProductId屬性:

int myid; 
if(SelectedProduct != null) 
    myid = SelectedProduct.Id; 
+0

謝謝您的回答,對我來說工作正常。 –

-2

如果要訪問它的後端代碼,你可以做

myID = (lb_Configuration.SelectedItem as (Type of the object it is binded to)).ID; 

但它是很好的避免後面xaml.cs代碼。如果你解釋你實際想要達到的目標,我可以用MVVM的方式來幫助你。

+0

非常感謝。我已經寫了一個'SelectedProduct'來從* xml *文件獲得產品,並且每個'Product'在* xml *文件中都有很多對象,如:* id *,* name *,* value *,現在當我點擊一個按鈕,我需要從我的列表框中已經選擇的'Product'中獲得一個對象。希望我對你解釋清楚。 –

+1

_「這是很好的避免xaml.cs代碼」_不,它不是。這取決於你必須達到什麼以及你的編程風格是什麼。最佳做法是希望將所有邏輯放在ViewModels類中,並留在僅查看UI的東西中,但除此之外,您可以以任何您想要的方式處理View。 –

+0

我寫的視圖模型是這樣的:'公共產品SelectedProduct { 得到{selectedProduct; } 設置 { 如果(selectedProduct =值!) { selectedProduct =值; NotifyPropertyChanged(); }} } ' –