我正在使用mahapps
,prism
[模块化]构建WPF应用程序。我的代码低于HomeWindow.xaml
。
<Controls:MetroWindow x:Class="Project.Views.HomeWindow"
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:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
xmlns:local="clr-namespace:Project.Views"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
<!--The above code is for automatically binding of viewmodel into view-->
Height="700" Width="1200" Background="White">
<Grid>
<TabControl ItemsSource="{Binding TabCollection}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock Text="{Binding Name}"/>
</TextBlock>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<Label Content="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Grid>
</Controls:MetroWindow>
我在HomeViewModel.cs
目录下的ViewModels
中有以下结构。
public class HomeViewModel : BindableBase
{
private ObservableCollection<Item> _tabCollection;
public ObservableCollection<Item> TabCollection { get { return _tabCollection; } set { SetProperty(ref _tabCollection, value); } }
//Prism way of getting and setting data
}
public class Item
{
private string Name;
private string Content;
public Item(string name, string content)
{
Name = name;
Content = content;
}
}
下面是我如何通过TabCollection
将数据添加到HomeWindow.xaml.cs
属性中。
private HomeViewModel _model=new HomeViewModel();
public HomeWindow(EmployeeViewModel model)
{
InitializeComponent();
_model.UserViewModel = model;
LoadHomeData(_model.UserViewModel.EmpRole);
DataContext = this;
}
private void LoadHomeData(string Role)
{
if (string.Equals(Role, "Admin"))
{
_model.TabCollection= new ObservableCollection<Item>()
{
new Item("Test1", "1"),
new Item("Test2", "2"),
new Item("Test3", "3")
};
}
}
现在重要的是,标签不会显示。它是一个空白的空窗口。我已经按照 issue here
中的示例进行了操作,并且已经通过几个类似的帖子进行了同样的方法。但他们都没有帮助。这是因为prism
的{{1}}方式还是还缺少其他任何内容?希望能找到一些帮助......
答案 0 :(得分:1)
您的问题与MahApps或Prism无关,而是与WPF的工作方式有关。在您的情况下,Name
和Content
是私有字段,应该是公共属性
public string Name { get; set; }
public string Content { get; set; }
private或field不是有效的绑定源。您可以在Binding Sources Overview下找到更多关于什么是有效绑定源的信息,但在您的情况下,就CLR对象而言:
您可以绑定到任何公共语言运行时(CLR)对象的公共属性,子属性以及索引器。绑定引擎使用CLR反射来获取属性的值。或者,实现ICustomTypeDescriptor或具有已注册的TypeDescriptionProvider的对象也可以使用绑定引擎。
另一个问题是DataContext
设置错误。目前设置为HomeWindow
,我认为它应设置为HomeViewModel
的实例,其中包含TabCollection
属性
DataContext = _model;