Wpf 使用代码隐藏从XAML访问变量和从ViewModel访问对象

Wpf 使用代码隐藏从XAML访问变量和从ViewModel访问对象,wpf,xaml,mvvm,windows-phone-7.1,Wpf,Xaml,Mvvm,Windows Phone 7.1,我是windows phone开发的新手。我想问一下,是否有可能做到这一点。我需要使用代码隐藏访问XAML中的变量,然后将其作为一个项目添加到视图模型中的现有列表中。因此,我需要访问视图模型以获取列表,并访问XAML以从资源中获取变量 这可行吗?如果是,我如何访问它。这是我当前XAML中的内容 <phone:PhoneApplicationPage.Resources> <system:String x:Key="scanName">SCAN</system:S

我是windows phone开发的新手。我想问一下,是否有可能做到这一点。我需要使用代码隐藏访问XAML中的变量,然后将其作为一个项目添加到视图模型中的现有列表中。因此,我需要访问视图模型以获取列表,并访问XAML以从资源中获取变量

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

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

扫描

非常感谢,

我没有winphone应用程序,所以我在wpf上做了一个简单的例子(它与winphone类似)

//将动态资源中的字符串值写入textblock

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

在我看来,您的场景是特定于veru的。请尝试阅读有关绑定的内容。可能是绑定在您的场景中更有用。

您试图做的是对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中获取它,并在ViewModel上提供一个属性,您的视图可以绑定到该属性。

:)严重违规,我的老板刚刚要求我尝试这种方法:(无论如何,如何在我的视图模型中的现有可观察集合列表中添加scanName字符串(Scanhistory是列表的名称)对于这些问题,我深表歉意,我的确是c#和Windows开发的新手。再次感谢。@JennyJane:我略微更新了我的答案:要将项目添加到ViewModel的列表中,您需要将视图的DataContext解析为ViewModel的类型,然后您可以访问属性…(vm.ScanHistory.add(…)@JennyJane:如果这对你有效,请投票并按回答进行标记。谢谢!嗨@Marc你的天才,它有效!谢谢。:)由于缺乏声誉,我无法投票。嗨@Marc,我可以问最后一个问题吗?我尝试了上述代码,scanName成功添加到列表中。但是,列表中的其他项目不再加载。你知道背后的原因吗?
var vm = DataContext as MyViewModel;
if (vm == null) return;
vm.ScanHistory.Add(scanName);