使用Code Behind从ViewModel访问XAML中的变量和对象

时间:2013-04-15 03:02:59

标签: wpf xaml mvvm windows-phone-7.1

我是Windows手机开发的新手。我想问一下这种情况是否可行。我需要使用后面的代码访问XAML中的变量,然后我将它作为项添加到我的View Model中的现有列表中。因此,我需要访问我的View Model以获取列表,并且XAML需要从资源中获取变量。

这可行吗?如果是,我该如何访问它。这就是我目前的XAML中的内容。

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

非常感谢,

2 个答案:

答案 0 :(得分:1)

我没有接近winphone app所以我在wpf上做了一个简单的例子(它与winphone类似)。

//将动态资源中的字符串值写入文本块

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

//在代码隐藏中更改资源(this在我的示例中是Window)

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

根据我的想法,你的场景是特定的。尝试阅读有关绑定的内容。可能绑定在您的场景中会更有用。

答案 1 :(得分:1)

你要做的是对MVVM所涉及的一切都有很大的侵犯,但它有可能......

在视图的代码隐藏中使用以下行,您可以...

...访问资源字符串:

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

...访问ViewModel:

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

话虽如此,你真的不应该这样做。 MVVM的想法是完全解耦ViewModel和View,并让WPF绑定机制为您连接它们。在您的情况下,据我所知,您应该将扫描名称存储在其他位置,作为资源或配置值,在ViewModel中获取它,并在您的View可以绑定的ViewModel上提供属性。