这个问题几乎说明了一切.
我有一个窗口,并尝试使用完整的命名空间将DataContext设置为ViewModel,但我似乎做错了.
<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="BuildAssistantUI.ViewModels.MainViewModel">
Run Code Online (Sandbox Code Playgroud) 我正在构建一个Windows Phone 7应用程序,我需要在我的视图中引用我的ViewModel,以便我可以从我的事件处理程序设置属性.唯一的问题是我无法获得该引用.
我做了什么;
我有一个ViewModelLocator(删除了无关的位):
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<TunerViewModel>();
}
[SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Justification = "This non-static member is needed for data binding purposes.")]
public TunerViewModel Tuner
{
get { return ServiceLocator.Current.GetInstance<TunerViewModel>(); }
}
Run Code Online (Sandbox Code Playgroud)
和视图(XAML):
DataContext="{Binding Tuner, Source={StaticResource Locator}}">
Run Code Online (Sandbox Code Playgroud)
和视图的代码隐藏:
public partial class Tuner : PhoneApplicationPage
{
private readonly TunerViewModel _viewModel;
public Tuner()
{
_viewModel = DataContext as TunerViewModel;
InitializeComponent();
}
Run Code Online (Sandbox Code Playgroud)
我发现这个链接MVVM View对ViewModel的引用,其中DataContext被转换为ViewModel,所以我尝试了同样的,因为它看起来是一个很好的解决方案.但是,我的_viewModel字段在强制转换后为null.为什么这样,我该如何解决这个问题?我无法在Google/Stackoverflow上找到它
提前致谢 :)
我正在尝试学习MVVM,但还有一些我还不了解的东西.
目前,我有这个事件处理程序:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (MessageBox.Show("Are you sure you want to close this application?", "Close??", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No)
{
e.Cancel = true;
}
}
Run Code Online (Sandbox Code Playgroud)
很容易.但是,我想在此应用程序中应用MVVM模式.
我想知道,我是否应该将此逻辑放在ViewModel中而不是直接放在视图代码中?如果是这样,我该怎么做呢?
谢谢