2013-04-15 34 views
4

我是windows phone開發的新手。我想問問是否可以做這種情況。我需要使用後面的代碼訪問XAML中的變量,然後將其作爲項目添加到我的View Model中的現有列表中。因此,我需要訪問我的兩個View Model以獲取列表和XAML以從資源中獲取變量。使用代碼訪問來自XAML和ViewModel對象的變量背後

這是可行的嗎?如果是,我該如何訪問它。這是我在當前的XAML中所擁有的。

<phone:PhoneApplicationPage.Resources> 
    <system:String x:Key="scanName">SCAN</system:String> 
</phone:PhoneApplicationPage.Resources> 

謝謝了,

回答

1

什麼你想要做的是一個相當大的違反一切MVVM是關於,但它是可能的...

隨着您的視圖的代碼隱藏以下行,你可以...

...訪問資源字符串:

var scanName = this.Resources["scanName"]; 

...訪問視圖模型:

var vm = DataContext as MyViewModel; 
if (vm == null) return; 
vm.ScanHistory.Add(scanName); 

這就是說,你真的不應該這樣做。 MVVM的想法是完全解耦ViewModel和View,並讓WPF綁定機制將它連接在一起。就你而言,據我所知,你應該將掃描名稱存儲在其他地方,無論是作爲資源還是配置值,都可以在ViewModel中獲取並在ViewModel上提供一個屬性,View可以綁定到該屬性上。

+0

:)大違規行爲,我只是問我的老闆:( 反正,我怎麼可以添加在現有的可觀測集合列表中scanName串在我的視圖模型(Scanhistory是列表的名稱來嘗試這種方法) 我很抱歉,我真的是c#和Windows開發的新手。再次感謝。 – JennyJane

+0

@JennyJane:我稍微更新了我的答案:要添加項目到您的ViewModel列表中,您需要解析你的視圖的DataContext到ViewModel的類型,然後你可以訪問屬性...(vm.ScanHistory.Add(...)); – Marc

+0

@JennyJane:如果這適用於你,請upvote並標記爲已回答。謝謝! – Marc

1

我還沒有靠近winphone應用程序,所以我就WPF簡單的例子(這是similiar與winphone)。從動態資源

//寫入字符串值轉換成文本塊

<TextBlock FontSize="14" Text="{DynamicResource scanName}"/> 

//改變代碼隱藏的資源(this是窗口在我的例子)

this.Resources["scanName"] = "new value"; 

正如我心中,你的情況是veru具體嘗試閱讀關於綁定。綁定可能會在你的場景中更有用。