ViewModelLocator.AutoWireViewModel - 没有MainWindow的DataContext

时间:2016-02-01 07:46:08

标签: c# visual-studio prism-5

MainWindow UI

<Window x:Class="PrismSanity.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>

        <TextBlock Text="{Binding MyName}"></TextBlock>


    </Grid>
</Window>

MainWindowViewModel

public class MainWindowViewModel : BindableBase
    {

        private string _MyName = "John";

        public string MyName
        {
            get { return _MyName = "John"; }
            set { SetProperty(ref _MyName, value); }
        }


    }

我安装了SNOOP以查看发生了什么,但VM未链接到View。如果我用第二个视图做同样的事情,并使用

<ContectContainer>
<views:ViewA/>
</ContentContainer>
主窗口中的

然后我得到ViewA和ViewAViewModel链接正常。 谢谢你的期待。

1 个答案:

答案 0 :(得分:2)

Prism仅支持UserControl类而非Window类。 AutoWireViewModel仅与UserControl班级有关。

我有同样的问题我解决了这个绑定代码背后的上下文 - 部分使用Unity。这样的事情:

public partial class ShellView : Window
{
    public ShellView(ShellViewModel viewModel)
    {
        this.InitializeComponent();

        // Set the ViewModel as this View's data context.
        this.DataContext = viewModel;
    }

当app创建ShellView(它是你的PrismSanity.MainWindow)时,单元注入viewModel(ShellViewModel

技术债务很少。