编辑: 问题是我的视图模型不公开,因此找不到绑定。出于某种原因,他们需要在Silverlight中公开,即使私有视图模型适用于WPF。我在下面的回答中有更详细的说明。
我正在尝试在Silverlight中实现MVVM WPF应用程序,但我之前从未使用过Silverlight。我正在努力获得要显示的绑定内容。我几乎完全按照WPF的方式实现它,除了Main位是UserControl,而不是Window,应用程序由网站托管,我必须删除x:Type
中的DataTemplate
} DataType
我的网站到主页工作正常,因为我可以在该页面中显示文本框或其他内容,但是不会显示绑定。有什么建议吗?
我的MainPage.xaml.cs:
public partial class MainPage : UserControl
{
private MainPageViewModel _viewModel;
public MainPage()
{
InitializeComponent();
_viewModel = new MainPageViewModel();
this.DataContext = _viewModel;
}
}
我的MainPage.xaml:
<UserControl x:Class="TransformationServices.Silverlight.MainPage"
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"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"
xmlns:view="clr-namespace:TransformationServices.Silverlight.View"
xmlns:viewModel="clr-namespace:TransformationServices.Silverlight.ViewModel"
xmlns:local="clr-namespace:TransformationServices.Silverlight"
Background="#FF2D2D30">
<UserControl.Resources>
<local:ViewConverter x:Key="viewConverter"/>
<DataTemplate DataType="viewModel:InputSelectViewModel">
<TextBlock Text="Hello World!"/>
<!-- This textblock is just for testing. It doesn't work, and neither does the following line-->
<view:InputSelect/>
</DataTemplate>
</UserControl.Resources>
<ContentControl Content="{Binding CurrentView}" />
</UserControl>
我的MainPageViewModel.cs
class MainPageViewModel : ViewModelBase, INotifyPropertyChanged
{
private ViewModelBase _currentView;
private List<ViewModelBase> _viewModels;
private int _viewIndex;
public ViewModelBase CurrentView
{
get { return _currentView; }
set
{
if (value != _currentView)
{
_currentView = value;
OnPropertyChanged("CurrentView");
}
}
}
public MainPageViewModel()
{
_viewModels = new List<ViewModelBase>();
// Add view models here
_viewModels.Add(new InputSelectViewModel());
_viewIndex = 0;
CurrentView = _viewModels[_viewIndex];
}
}
答案 0 :(得分:2)
问题似乎是我的ViewModel不公开。我在输出中注意到以下类型的消息:
System.Windows.Data Error: Cannot get '<Whatever property of View Model>' value ...
此消息是针对我绑定的每个属性,包括CurrentView
。将View Models公开后,绑定工作完美。对我来说,Silverlight需要将这些类作为WPF的私有工作时才需要公开,这似乎很奇怪,但这是我第一次使用Silverlight,所以这种复杂性让我感到高兴。希望这个答案可以帮助将来的某个人。无论如何,这是绑定不起作用的主要原因,因此CurrentView
没有显示。
我很难调试此问题的另一个原因是我的页面意外缓存了所有内容,因此我的某些更改无法显示。这个链接帮助了我:
http://www.codeproject.com/Articles/143414/Prevent-your-Silverlight-XAP-File-from-Caching-in