• WPF 编辑状态切换


        有时候DataGrid编辑的时候一个属性需要根据别的属性呈现不同的编辑状态。这就需要一个做一个状态切换。比如地址是1的时候,读写类型是读写、只读、只写。地址是2的时候,就只读。状态栏切换为TextBook不能修改。效果如下:

        

       

      1.先需要在资源字典中定义2个模板:

    <UserControl.Resources>
            <ResourceDictionary>
            <DataTemplate x:Key="TextBlockTemplate" DataType="viewModel:IoDataItemViewModel" >
                    <TextBlock Text="{Binding ReadWriteTypeStr,UpdateSourceTrigger=PropertyChanged}"  TextAlignment="Center"  VerticalAlignment="Stretch"   />
                </DataTemplate>
                <DataTemplate x:Key="ComBoxTemplate" DataType="viewModel:IoDataItemViewModel">
                    <ComboBox Text="{Binding ReadWriteTypeStr, UpdateSourceTrigger=PropertyChanged}" Loaded="FrameworkElement_OnLoaded"
                              ItemsSource="{x:Static viewModel:ReadWriteTypeView.ReadWriteTypes}" SelectedValuePath="Key"  DisplayMemberPath="Value" 
                              BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center">
                    </ComboBox>
                </DataTemplate>
            </ResourceDictionary>
        </UserControl.Resources>

    2.定义模板选择器

       定义了一个TextBlock和Combox模板。在xaml中初始化。

      public class IoItemReadWriteTypeGridCellTemplateSelector : DataTemplateSelector
        {
            public DataTemplate ComBoxTemplate { get; set; }
            public DataTemplate TextBlockTemplate { get; set; }
    
            public override DataTemplate SelectTemplate(object item, DependencyObject container)
            {
                var ioitem = item as IoDataItemViewModel;
                if (ioitem == null)
                    return base.SelectTemplate(item, container);
    
                var type = IOAddressHelper.GetReadWriteType(ioitem.IoDeviceViewModel.IoDevice.DriverName, ioitem.Address);
    
                if (type != ReadWriteType.ReadWrite)
                {
                    return TextBlockTemplate;
                }
                return ComBoxTemplate;
            }
        }

    3.在Grid Column定义中绑定对象。初始化TextBlockTemplate和 ComBoxTemplate, 这样在触发编辑状态的时候,会根据地址的不同出现不同的编辑状态

       <syncfusion:GridTemplateColumn  HeaderText="读写类型" MappingName="ReadWriteType" MinimumWidth="100" ColumnSizer="SizeToHeader" HorizontalHeaderContentAlignment="Center">
                        <syncfusion:GridTemplateColumn.CellTemplate>
                            <DataTemplate DataType="viewModel:IoDataItemViewModel">
                                <TextBlock Text="{Binding ReadWriteTypeStr,UpdateSourceTrigger=LostFocus}" HorizontalAlignment="Center" VerticalAlignment="Center" />
                            </DataTemplate>
                        </syncfusion:GridTemplateColumn.CellTemplate>
                        <syncfusion:GridTemplateColumn.EditTemplate>
                            <DataTemplate DataType="viewModel:IoDataItemViewModel">
                                <TextBlock Text="{Binding ReadWriteTypeStr,UpdateSourceTrigger=LostFocus}"   />
                            </DataTemplate>
                        </syncfusion:GridTemplateColumn.EditTemplate>
                        <syncfusion:GridTemplateColumn.EditTemplateSelector>
                            <local:IoItemReadWriteTypeGridCellTemplateSelector  TextBlockTemplate="{StaticResource TextBlockTemplate}" ComBoxTemplate="{StaticResource ComBoxTemplate}"></local:IoItemReadWriteTypeGridCellTemplateSelector>
                        </syncfusion:GridTemplateColumn.EditTemplateSelector>
                    </syncfusion:GridTemplateColumn>

        

  • 相关阅读:
    java基础(一)
    html脚本总结
    python编码规范以及推导式的编写
    性能测试
    IOS 单例分析
    IOS 从一个应用跳转另一个应用
    ios开发 如何在应用内获取当前周围wifi列表和强度 并实现在应用内控制wifi开关
    iOS 获取手机的型号,系统版本,软件名称,软件版本
    ios下最简单的正则,RegexKitLite
    网络编程总结(解析数据,下载文件,确认网络环境)
  • 原文地址:https://www.cnblogs.com/stoneniqiu/p/4274783.html
Copyright © 2020-2023  润新知