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>

 

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM