zoukankan      html  css  js  c++  java
  • WPF MVVM示例自定义模板数据绑定

    在触摸屏设备上、由于列表是的信息展示不是非常直观和便捷操作。

    所以也就出现了很多用面板控件:类似win10的Metro风格, 所以抽空做了一个WPF面板控件。

    话不多上 , 先上一个示例图。

     

    为了便于阅读、于是做了一个简单版本, 提供源代码各位可以下载, 该示例中、用的是GalaSoft Mvvm。不了解的朋友Google一下。

    新建一个WPF工程添加一个自定义控件、名称自定义, 一下所有UserControl实现代码: 

    <UserControl.Resources>
            <Style x:Key="TextBlockStyle" TargetType="{x:Type TextBlock}">
                <Setter Property="TextWrapping" Value="NoWrap"/>
                <Setter Property="TextTrimming" Value="None"/>
                <Setter Property="HorizontalAlignment" Value="Left"/>
                <Setter Property="FontSize" Value="15"/>
                <Setter Property="Margin" Value="10 8 5 0"/>
                <Setter Property="Foreground" Value="#616161"/>
            </Style>
        </UserControl.Resources>
        <Grid>
            <ItemsControl ItemsSource="{Binding DoginfoModelList}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid Columns="8"></UniformGrid>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
    
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Border CornerRadius="5" Background="White" Margin="10">
                            <StackPanel Background="White" Margin="1">
                                <Border Height="80">
                                    <Grid>
                                        <Grid.Background>
                                            <ImageBrush ImageSource="Images/Logo.jpg"  Stretch="Uniform"/>
                                        </Grid.Background>
                                    </Grid>
                                </Border>
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                                    <TextBlock  FontSize="20" FontWeight="Bold" VerticalAlignment="Center" Text="{Binding Info}"></TextBlock>
                                    <Border Background="Red"  Width="40" Height="20" VerticalAlignment="Center"  Margin="3 0 0 0" CornerRadius="2">
                                        <TextBlock Text="{Binding TypeName}" FontSize="15" Foreground="White" HorizontalAlignment="Center"/>
                                    </Border>
                                </StackPanel>
    
                                <Grid>
                                    <TextBlock Style="{DynamicResource TextBlockStyle}" Text="{Binding Code}"></TextBlock>
                                    <TextBlock Style="{DynamicResource TextBlockStyle}" HorizontalAlignment="Right" Text="{Binding BedNumber}"></TextBlock>
                                </Grid>
    
                                <TextBlock Style="{DynamicResource TextBlockStyle}" Text="{Binding Doctor}"></TextBlock>
                                <TextBlock Style="{DynamicResource TextBlockStyle}" Text="{Binding Day}"></TextBlock>
                                <TextBlock Style="{DynamicResource TextBlockStyle}" Text="{Binding Time}"></TextBlock>
                            </StackPanel>
                        </Border>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </Grid>

    用于后台绑定的数据模板的实体类代码:

     public class DogInfo : ViewModelBase
        {
    
            #region private
            private string info;
            private string typeName;
            private string code;
            private string bedNumber;
            private string doctor;
            private string day;
            private string time;
            #endregion
    
            /// <summary>
            ///  主要信息
            /// </summary>
            public string Info
            {
                get { return info; }
                set { info = value; RaisePropertyChanged(); }
            }
    
            /// <summary>
            /// 显示内容
            /// </summary>
            public string TypeName
            {
                get { return typeName; }
                set { typeName = value; RaisePropertyChanged(); }
            }
    
            /// <summary>
            /// 编号
            /// </summary>
            public string Code
            {
                get { return code; }
                set { code = value; RaisePropertyChanged(); }
            }
    
            /// <summary>
            /// 床号
            /// </summary>
            public string BedNumber
            {
                get { return bedNumber; }
                set { bedNumber = value; RaisePropertyChanged(); }
            }
    
            /// <summary>
            /// 医师
            /// </summary>
            public string Doctor
            {
                get { return doctor; }
                set { doctor = value; RaisePropertyChanged(); }
            }
    
            /// <summary>
            /// 住院天数
            /// </summary>
            public string Day
            {
                get { return day; }
                set { day = value; RaisePropertyChanged(); }
            }
    
            /// <summary>
            /// 住院时间
            /// </summary>
            public string Time
            {
                get { return time; }
                set { time = value; RaisePropertyChanged(); }
            }
    
    
        }

    后台View 实现代码:

    public class MainViewModel : ViewModelBase
        {
            /// <summary>
            /// Initializes a new instance of the MainViewModel class.
            /// </summary>
            public MainViewModel()
            {
                DoginfoModelList = new ObservableCollection<DogInfo>();
                InitLoadPageList();
            }
    
            private void InitLoadPageList()
            {
                for (int i = 0; i < 32; i++)
                {
                    DoginfoModelList.Add(new DogInfo()
                    {
                        Info = "小贱贱 男 3岁",
                        TypeName = "急诊",
                        Code = "狗狗编号:L0317",
                        BedNumber = "床号:01",
                        Doctor = "主治医师:贾静",
                        Day = "住院编号:37天",
                        Time = "住院时间:" + DateTime.Now.ToString("yyyy-MM-dd")
                    });
                }
            }
    
            private ObservableCollection<DogInfo> doginfoModelList;
    
            /// <summary>
            /// 狗狗信息列表
            /// </summary>
            public ObservableCollection<DogInfo> DoginfoModelList
            {
                get { return doginfoModelList; }
                set
                {
                    doginfoModelList = value;
                    RaisePropertyChanged();
                }
            }
        }

    最后, 在首页添加用户控件、在加载时给主窗体进行DataContext绑定代码:

    /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            MainViewModel vm;
            public MainWindow()
            {
                InitializeComponent();
                vm = new MainViewModel();
                this.DataContext = vm;
            }
    
           
        }

    最后的局部显示效果图如下:

     PS:  喜欢的文章点个赞吧,  另外源代码链接:点我下载

  • 相关阅读:
    sss
    stm32cube使用
    FreeRTOS
    嵌入式网站
    CRC分段校验
    IAR编译器
    (转)UCOSII源代码剖析
    (转)stm32硬件IIC
    keil MDK注意事项
    (转).Net中自定义类作为Dictionary的key详解
  • 原文地址:https://www.cnblogs.com/zh7791/p/9119454.html
Copyright © 2011-2022 走看看