簡體   English   中英

C#WPF基於它的ItemsSource使DataGrid TemplateColumn ComboBox可編輯

[英]C# WPF Make DataGrid TemplateColumn ComboBox editable based on it's ItemsSource

如何根據列中的項目是否具有在生成列時將ItemsSource屬性設置為null方式來使ComboBox 可編輯

只需在選定的索引更改事件或主窗口加載時選中組合框itemsource,然后為該選定的項目設置組合框IsEditable="true"

您可以使用DataTrigger將樣式添加到ComboBox ,在其中檢查ItemsSource是否為null。

這是一個非常簡單的示例:

<Window x:Class="Q52063400.MainWindow"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      mc:Ignorable="d"
      Title="MainWindow" Height="450" Width="800">
  <Grid>
      <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
          <DataGrid.Columns>
              <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
              <DataGridTextColumn Header="Surname" Binding="{Binding Surname}" />
              <DataGridTemplateColumn Header="City">
                  <DataGridTemplateColumn.CellTemplate>
                      <DataTemplate>
                          <ComboBox ItemsSource="{Binding Cities}" 
                                    SelectedItem="{Binding SelectedCity, Mode=TwoWay}">
                              <ComboBox.Style>
                                  <Style TargetType="ComboBox">
                                      <Setter Property="IsEditable" Value="False"/>
                                      <Style.Triggers>
                                          <DataTrigger Binding="{Binding Cities}" Value="{x:Null}">
                                              <Setter Property="IsEditable" Value="True"/>
                                          </DataTrigger>
                                      </Style.Triggers>
                                  </Style>
                              </ComboBox.Style>
                          </ComboBox>
                      </DataTemplate>
                  </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>
          </DataGrid.Columns>
      </DataGrid>
  </Grid>
</Window>

后台代碼:

public partial class MainWindow : Window
{
   public MainWindow()
   {
       InitializeComponent();

       DataContext = GetItems();
   }

   public List<Person> GetItems ()
   {
       return new List<Person>()
       {
           new Person {Name = "John", Surname = "Rocky", Cities = new List<string> { "New York City", "Washington D.C.", "Chicago" } },
           new Person {Name = "John", Surname = "Rocky"},
           new Person {Name = "John", Surname = "Rocky", Cities = new List<string> { "Baltimore", "San Francisco", "Boston" } }
       };
   }
}

public class Person
{
   public string Name { get; set; }
   public string Surname { get; set; }

   public IEnumerable<string> Cities { get; set; }
   public string SelectedCity { get; set; }
}

基於ItemsSource使用不同編輯器的示例:

...
<DataGridTemplateColumn Header="City">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>                           
            <Grid>
                <TextBox Text="{Binding SelectedCity, Mode=TwoWay}">
                    <TextBox.Style>
                        <Style TargetType="TextBox">
                            <Setter Property="Visibility" Value="Collapsed"/>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Cities}" Value="{x:Null}">
                                    <Setter Property="Visibility" Value="Visible"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBox.Style>
                </TextBox>
                <ComboBox ItemsSource="{Binding Cities}" 
                      SelectedItem="{Binding SelectedCity, Mode=TwoWay}">
                    <ComboBox.Style>
                        <Style TargetType="ComboBox">
                            <Setter Property="Visibility" Value="Visible"/>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Cities}" Value="{x:Null}">
                                    <Setter Property="Visibility" Value="Collapsed"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </ComboBox.Style>
                </ComboBox>
            </Grid>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM