【问题标题】:WPF&prism MVVM and Tabitem with an imageWPF&prism MVVM 和 Tabitem 与图像
【发布时间】:2017-11-15 16:04:00
【问题描述】:

我有一个带有选项卡控件的 wpf 应用程序,它在 tabitem 上显示图像而不是文本。 现在我想重写整个事情并使用棱镜。 我找到了一个示例,但只有一个文本属性绑定到 tabitem。 如何通过绑定到视图模型来显示图像 (每个模块都有一个选项卡)。

【问题讨论】:

    标签: wpf mvvm prism-6


    【解决方案1】:

    将项目绑定到 TabControl 时,使用 ItemsSource。 ItemTemplate 定义选项卡标题中显示的内容。 ContentTemplate 定义选项卡区域中显示的内容。

    查看模型

    public class ShellViewModel : BindableBase
    {
        public ObservableCollection<ItemViewModel> Items
        {
            get;
        } = new ObservableCollection<ItemViewModel>();
    
        public ShellViewModel()
        {
            Items.Add(new ItemViewModel { Name = "First", ImageUri = new Uri("http://placehold.it/50x50") });
            Items.Add(new ItemViewModel { Name = "Second", ImageUri = new Uri("http://placehold.it/40x40") });
            Items.Add(new ItemViewModel { Name = "Third", ImageUri = new Uri("http://placehold.it/30x30") });
        }
    }
    
    public class ItemViewModel : BindableBase
    {
        private string _name;
        private Uri _imageUri;
    
        public string Name
        {
            get => _name;
            set => SetProperty(ref _name, value);
        }
    
        public Uri ImageUri
        {
            get => _imageUri;
            set => SetProperty(ref _imageUri, value);
        }
    }
    

    查看

    <Window x:Class="WpfApp4.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:local="clr-namespace:WpfApp4"
        xmlns:viewModels="clr-namespace:WpfApp4.ViewModels"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <viewModels:ShellViewModel />
    </Window.DataContext>
    <Grid>
        <TabControl ItemsSource="{Binding Items}">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <Image Source="{Binding ImageUri}" Height="20"></Image>
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Name}"></TextBlock>
                </DataTemplate>
            </TabControl.ContentTemplate>
        </TabControl>
    </Grid>
    

    上面的代码将在标签标题中显示三 (3) 个带有指定图像的标签。我只用文字对内容进行了虚拟化。

    【讨论】:

    • 谢谢。当我通过代码或 xaml 自己创建 tabitems 时,我知道该怎么做。但我的问题是关于棱镜的。 tabitems 由 PRISM 在导航到视图时创建。
    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多