zoukankan      html  css  js  c++  java
  • 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>

        

  • 相关阅读:
    《Ubuntu标准教程》学习总结
    Ubuntu下安装VirtualBox并为其添加USB支持
    Eclipse下配置TinyOS开发环境
    Ubuntu下的网络服务
    Ubuntu12.04添加环境变量
    Ubuntu12.04下搭建Java环境
    poj 1066 线段相交
    poj 2653 (线段相交判断)
    poj 2398 (叉积+二分)
    hdu 4883 思维题
  • 原文地址:https://www.cnblogs.com/stoneniqiu/p/4274783.html
Copyright © 2011-2022 走看看