• WPF的MVVM模式


    mvvm模式:model   view   viewmodel

    model:

    public class NavicateModel
        {
            public string Name { get; set; }
        }

    viewmodel:需要继承INotifyPropertyChanged

    public class MainViewModel : INotifyPropertyChanged
        {
    
            public event PropertyChangedEventHandler PropertyChanged;
            private void RaisePropertyChanged(string propertyName)
            {
                // take a copy to prevent thread issues
                //PropertyChangedEventHandler handler = PropertyChanged;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }
    
            private ObservableCollection<NavicateModel> _navicateModelList;
            public ObservableCollection<NavicateModel> NavicateModelsList
            {
                get { return _navicateModelList; }
                set
                {
                    _navicateModelList = value;
                    RaisePropertyChanged("NavicateModelsList");
                }
            }
            public MainViewModel()
            {
                NavicateModelsList = new ObservableCollection<NavicateModel>();
                foreach (MenuEnum menuEnum in Enum.GetValues(typeof(MenuEnum)))
                {
                    NavicateModelsList.Add(new NavicateModel { Name = menuEnum.ToString() });
                }
                NavicateModelsList.Add(new NavicateModel { Name = "持续更新中" });
            }
            private NavicateModel _navicateModel;
            public NavicateModel NavicateModelItem
            {
                get { return _navicateModel; }
                set
                {
                    _navicateModel = value; RaisePropertyChanged("NavicateModelItem");
                }
            }
            //左侧导航栏  用于绑定右侧界面
            private object _controllPanel;
    
            public object ControllPanel
            {
                get { return _controllPanel; }
                set
                {
                    _controllPanel = value;
                    RaisePropertyChanged("ControllPanel");
                }
            }
            //初始化的界面
            public ICommand OnLoadCommand => new MyCommand(obj =>
            {
    
    
            });
            //加载新界面
            public ICommand NavicateChanged => new MyCommand(obj =>
            {
                if (obj == null) return;
                var model = obj as NavicateModel;
                MenuItemSelection(model.Name);
            });

    view就是你的界面。可以再界面上绑定命令。由于我是将用户控件和主窗体分开的,上用户控件的代码

      <Canvas x:Name="containerCanvas" Margin="100">
            <TextBlock  Text="{Binding Text,ElementName=spotLight}" Foreground="LightGray" FontSize="50"/>
            <TextBlock x:Name="GeometryText" Text="{Binding Text,ElementName=spotLight}" FontSize="50">
                <TextBlock.Foreground>
                    <LinearGradientBrush EndPoint="1,1" MappingMode="RelativeToBoundingBox" StartPoint="0,0">
                        <GradientStop Color="#FF9C1031" Offset="0.1"/>
                        <GradientStop Color="#FFBE0E20" Offset="0.2"/>
                        <GradientStop Color="#FF9C12AC" Offset="0.7"/>
                        <GradientStop Color="#FF0A8DC3" Offset="0.8"/>
                        <GradientStop Color="#FF1AEBCC" Offset="1"/>
                    </LinearGradientBrush>
                </TextBlock.Foreground>
                <TextBlock.Clip>
                    <EllipseGeometry x:Name="PART_EllipseGeometry">
                        <EllipseGeometry.Transform>
                            <TranslateTransform/>
                        </EllipseGeometry.Transform>
                    </EllipseGeometry>
                </TextBlock.Clip>
            </TextBlock>
            <Path Name="myPathShape" Fill="Transparent">
                <Path.Data>
                    <EllipseGeometry x:Name="MyEllipseGeometry" Center="0,70" RadiusX="100" RadiusY="100" />
                </Path.Data>
                <Path.Triggers>
                    <EventTrigger RoutedEvent="Path.Loaded">
                        <BeginStoryboard>
                            <Storyboard>
                                <!--<DoubleAnimation  Storyboard.TargetName="MyEllipseGeometry" Storyboard.TargetProperty="Width"  From="0" To="650" Duration="0:0:2" AutoReverse="True" RepeatBehavior="Forever"/>-->
                                <PointAnimation  Storyboard.TargetName="MyEllipseGeometry" Storyboard.TargetProperty="Center" From="0,70" To="350,70" Duration="0:0:1" AutoReverse="True" RepeatBehavior="Forever"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Path.Triggers>
            </Path>
        </Canvas>

    如果有自定义的属性需要注册:

    public string Text
            {
                get { return (string)GetValue(TextProperty); }
                set
                {
                    SetValue(TextProperty, value);
    
                }
            }
    
            // Using a DependencyProperty as the backing store for Text.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty TextProperty =
                DependencyProperty.Register("Text", typeof(string), typeof(SpotLight), new PropertyMetadata("WPFDeveloper"));
  • 相关阅读:
    Java多线程的两种实现方式
    Java实现验证码的产生和验证
    web前端对上传的文件进行类型大小判断的js自定义函数
    Java前端Rsa公钥加密,后端Rsa私钥解密(支持字符和中文)
    了解火爆的区块链和比特币
    Java中调用JavaScript方法
    Java读取文件的问题
    SpringBoot热部署简介
    Java使用Jetty实现嵌入式Web服务器及Servlet容器
    『安全工具』目录扫描 DirBuster AND 御剑
  • 原文地址:https://www.cnblogs.com/fanlin92/p/15406427.html
Copyright © 2020-2023  润新知