标签: datagridcomboboxcolumn

在WPF DataGrid中绑定ComboBoxColumn的ItemsSource

我有两个简单的Model类和一个ViewModel ...

public class GridItem
{
    public string Name { get; set; }
    public int CompanyID { get; set; }
}

public class CompanyItem
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class ViewModel
{
    public ViewModel()
    {
        GridItems = new ObservableCollection<GridItem>() {
            new GridItem() { Name = "Jim", CompanyID = 1 } };

        CompanyItems = new ObservableCollection<CompanyItem>() {
            new CompanyItem() { ID = 1, Name = "Company 1" },
            new …
Run Code Online (Sandbox Code Playgroud)

.net wpf binding wpfdatagrid datagridcomboboxcolumn

73
推荐指数
5
解决办法
10万
查看次数

将WPF DataGridComboBoxColumn与MVVM绑定

我已经查看了各种 问题的答案,但没有设法在我试图解决的问题的答案中映射内容.我把它简化为下面的代码(代表我想要实现的结果),并且基本上希望能够在没有编辑行的情况下渲染Person.TitleId其对应Title.TitleText的并且具有下拉列表正确绑定,以便TitleText在下拉列表中显示s,并在更改时将关联的TitleId背面写回Person记录.

简而言之,我<DataGridComboBoxColumn>在实现这一目标时会采取什么措施?

App.xaml.cs

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    var viewModel = new ViewModels.MainWindowViewModel();
    var mainWindow = new MainWindow();
    mainWindow.DataContext = viewModel;
    mainWindow.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml

<Grid>
    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=Contacts}">
        <DataGrid.Columns>
            <DataGridComboBoxColumn Header="Title" SelectedItemBinding="{Binding Person}">
                <DataGridComboBoxColumn.ElementStyle>
                    <Style TargetType="ComboBox">
                        <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.Titles}"/>
                        <Setter Property="IsReadOnly" Value="True"/>
                    </Style>
                </DataGridComboBoxColumn.ElementStyle>
                <DataGridComboBoxColumn.EditingElementStyle>
                    <Style TargetType="ComboBox">
                        <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.Titles}"/>
                        <Setter Property="DisplayMemberPath" …
Run Code Online (Sandbox Code Playgroud)

wpf datagrid mvvm datagridcomboboxcolumn

26
推荐指数
1
解决办法
3万
查看次数

如何在WPF DataGrid中实现可编辑的DataGridComboBoxColumn

我想让用户能够编辑WPF DataGrid中的一些数据(来自.net Framework 4.0)."仪器"列应允许用户从静态列表中选择可用的仪器或写入自由文本.我的DataGrid使用MVVM绑定到数据.我尝试了很多我在互联网上找到的解决方案,但没有一个能正常工作.这是我的代码:

<DataGrid Margin="0,6" ItemsSource="{Binding Path=Orders}" AutoGenerateColumns="False"  CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="True">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Instrument" MinWidth="140"                                      
 ItemsSource="{x:Static ViewModel.Instruments}" SelectedItemBinding="{Binding Path=SelectedInstrument}">
 <DataGridComboBoxColumn.EditingElementStyle>
   <Style TargetType="ComboBox">
     <Setter Property="IsEditable" Value="True"/>
   </Style>                  
 </DataGridComboBoxColumn.EditingElementStyle>                
</DataGridComboBoxColumn>   
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

下拉列表正确显示.可以使用任何文本编辑该字段,但在为自由文本关闭下拉列表后,它会为SelectedInstrument设置null.它仅适用于所选项目.我试图更改为SelectedValueBinding,但它没有帮助.

如何正确实施这一要求?有人可以在这里发布工作样本吗?

附加:订单是ObservableCollection Order具有类似字符串Title,DateTime Ordered,string SelectedInstrument,Instruments是一个字符串[]的属性

解决方案:以下建议作为bathineni工作的解决方法:

<DataGrid Margin="0,6" ItemsSource="{Binding Path=Orders}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="True">
 <DataGrid.Columns>
  <DataGridTemplateColumn Header="Instrument" MinWidth="140">
   <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
     <TextBlock Text="{Binding Path=SelectedInstrument, Mode=OneWay}"/>
    </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
   <DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
     <ComboBox IsEditable="True" Text="{Binding Path=SelectedInstrument}" 
      ItemsSource="{x:Static ViewModel.Instruments}"/>                   
    </DataTemplate>
   </DataGridTemplateColumn.CellEditingTemplate>
  </DataGridTemplateColumn>   
 </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

wpf binding datagrid datagridcomboboxcolumn

18
推荐指数
3
解决办法
2万
查看次数

如何使用MVVM将数据绑定到DataGrid中的DataGridComboBoxColumn

这真让我抓狂.我有一个DataGrid,它有一个DataGridComboBoxColumn,我希望用户可以使用它来进行选择.这是我网格的基本轮廓.

<DataGrid ItemsSource="{Binding GoalList}" DockPanel.Dock="Bottom" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridComboBoxColumn ItemsSource="{Binding LifeAreaList}" Header="Life Area"/>
<DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

DataGrid绑定到Goal类型的对象集合.每个目标都有一个LifeArea类型的属性.每个LifeArea都具有LifeAreaId和Name属性.

数据上下文包含一个可观察的目标集合:目标列表和生命区域列表:LifeAreaList.我希望用户能够为目标选择不同的生活区域.生命区域的名称也需要是显示的值.

编辑


解决方案是必须将DataGridComboBoxColumn的ItemsSource设置为静态资源.另一种选择是通过代码设置ItemsSource.

最后我有:

<DataGridComboBoxColumn x:Name="_lifeAreaComboBoxColumn" SelectedItemBinding="{Binding LifeArea}" DisplayMemberPath="Name" Header="Life Area">
Run Code Online (Sandbox Code Playgroud)

在后面的代码我设置ItemsSource:

_lifeAreaComboBoxColumn.ItemsSource = LifeAreaDAL.GetLifeAreas();
Run Code Online (Sandbox Code Playgroud)

当我有机会将其转换为StaticResource时.

wpf datagrid mvvm datagridcomboboxcolumn

15
推荐指数
1
解决办法
2万
查看次数

WPF - DataGridComboBoxColumn的示例

有时最简单的例子是最难找到的...

我有一个包含2列的数据网格.一列包含角色信息,另一列应包含一个包含可用用户列表的组合框.组合框中的数据与第一列中的数据无关.由于组合框没有datacontext,只有一个itemsource而且我似乎无法使用绑定这一事实让我感到震惊.

有人可以请一个简单的例子,它为表格和组合框中的数据使用两个不同的数据集吗?

wpf datagridcomboboxcolumn

12
推荐指数
1
解决办法
3万
查看次数

WPF DataGrid:DataGridComboxBox ItemsSource绑定到集合集合

情况:

我在XAML中创建了一个DataGrid,并将ItemsSource绑定到包含属性的某个类的ObservableCollection.然后在C#中,我创建了一个DataGridTextColumn和一个DataGridComboBoxColumn,并将这些绑定到ObservableCollection内对象的属性.我可以将DataGridComboBoxColumn绑定到一个简单的Collection,但我想要做的是将它绑定到一组字符串集合,这样对于每一行,DataGrid中的ComboBox都有一个不同的字符串集合.我没有这样做......

题:

如何绑定DataGridCombBoxColumn以便我可以为此类型列的每一行设置不同的字符串集合?

代码示例:

XAML:

<Window>
  <!-- ... -->
  WPFToolkit:DataGrid
           x:Name="DG_Operations"
           Margin="10,5,10,5" 
           Height="100" 
           HorizontalAlignment="Stretch" 
           FontWeight="Normal" 
           ItemsSource="{Binding Path=OperationsStats}"
           AlternatingRowBackground="{DynamicResource SpecialColor}" 
           HorizontalScrollBarVisibility="Auto" 
           VerticalScrollBarVisibility="Visible" 
           SelectionMode="Extended"
           CanUserAddRows="False" 
           CanUserDeleteRows="False"
           CanUserResizeRows="True" 
           CanUserSortColumns="True"
           AutoGenerateColumns="False" 
           IsReadOnly="False" 
           IsEnabled="True"
           BorderThickness="1,1,1,1" 
           VerticalAlignment="Stretch"/>
  <!-- ... -->
</Window>
Run Code Online (Sandbox Code Playgroud)

C#:

public class DataModelStatsOperations
{
   public ObservableCollection<IStatsOperation> OperationsStats { get; set; }
}

public interface IStatsOperation
{
   string Operation { get; set; }
   Collection<string> Data{ get; set; }
}

public class StatsOperation : IStatsOperation
{
    public StatsOperation(string operation, Collection<string> data)
    {
        Operation = operation; …
Run Code Online (Sandbox Code Playgroud)

c# wpf datagrid itemssource datagridcomboboxcolumn

11
推荐指数
2
解决办法
4万
查看次数

绑定DataGridComboBoxColumn.ItemsSource的问题

我有3个表:Item - 这是DataContext - 它有一个导航列Group Group - 有一个导航列Category.

我希望在DataGrid中包含(类别和组)列,当我选择一个类别时,它应该只在组列中显示Category.Groups.

这是我正在处理的代码:

<tk:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}">
    <tk:DataGrid.Columns>

        <!--Works-->
        <tk:DataGridComboBoxColumn                                        
            Header="Categroy" 
            DisplayMemberPath="Title"                    
            SelectedValuePath="CategoryId"
            SelectedValueBinding="{Binding Group.Category.CategoryId}"
            ItemsSource="{Binding Context.Categories, 
                Source={x:Static Application.Current}}"
        />


        <!--Look at these two things:-->

        <!--This does work-->
        <tk:DataGridTemplateColumn>
            <tk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ItemsControl
                        ItemsSource="{Binding Group.Category.Groups}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate DataType="{x:Type data:Group}">
                                <TextBlock Text="{Binding Title}"/>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </DataTemplate>
            </tk:DataGridTemplateColumn.CellTemplate>
        </tk:DataGridTemplateColumn>

        <!--But this does NOT work, even it's the same source-->
        <!--Notice I even tried a dummy converter and doesnt reach there-->
        <tk:DataGridComboBoxColumn 
            Header="Group" 
            DisplayMemberPath="Title"
            SelectedValuePath="GroupId"
            ItemsSource="{Binding Group.Category.Groups, …
Run Code Online (Sandbox Code Playgroud)

wpf binding wpftoolkit datagridcomboboxcolumn

10
推荐指数
2
解决办法
3万
查看次数

为WPF DataGridComboBox列绑定ItemsSource

问题:DataGridComboBox上的大多数代码示例似乎都使用静态资源作为ItemsSource.在我的用例中,我想为每个绑定对象提供不同的ItemsSources. 可以这样做吗?

背景:我正在尝试使用DataGridComboBoxColumn控件将一组Question类对象绑定到WPF DataGrid.Answer字符串提供SelectedValue.我希望AnswerDomain列表为每个ComboBox提供ItemsSource.AnswerDomain与Question到Question不同.

public class Question
  {
    string Answer {get; set;}
    List<string> AnswerDomain {get; set;}
    //...other stuff
  }
Run Code Online (Sandbox Code Playgroud)

XAML

<DataGrid ItemsSource="{Binding Path=InspectionItems}" AutoGenerateColumns="False" Name="dataGrid1" >
    <DataGrid.Columns>
        <DataGridComboBoxColumn Header="Answer Domain"
                                DisplayMemberPath="Answer"
                                SelectedValuePath="Answer"
                                ItemsSource="{Binding Path=AnswerDomain}" 
                                    >
        </DataGridComboBoxColumn>
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

问题:有几个问题.现在的关键问题是每个DataGrid Row中的ComboBox都没有显示AnswerDomain字符串.我尝试过一系列XAML组合但没有成功.帮我Stack Overflow.

更新: 下面选择的解决方案有效.在进一步摸索之后,通过添加UpdateSourceTrigger=PropertyChanged到SelectedItem,组合框中的用户更改然后反映在底层自定义对象中.

<DataGridTemplateColumn Header="Answer">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox 
                ItemsSource="{Binding AnswerDomain}" 
                SelectedItem="{Binding Answer, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

.net c# wpf datagrid datagridcomboboxcolumn

9
推荐指数
1
解决办法
1万
查看次数

wpf datagrid组合框列

我在阅读该领域时遇到了麻烦.我尝试过不同的方式,但仍然不能.我想读取用户选择以下3个值的值.

XAML中的代码

<DataGridComboBoxColumn X:Name="dgcbc" Header="Wynik"/>
Run Code Online (Sandbox Code Playgroud)

C#中的代码

List<string> list = new List <string> ();
lista.Add ("Prize");
lista.Add ("Draw");
lista.Add ("Lost");
dgcbc.ItemsSource = list;
Run Code Online (Sandbox Code Playgroud)

c# wpf datagridcomboboxcolumn

9
推荐指数
1
解决办法
5万
查看次数

DataGridComboBoxColumn用于不同行的不同ItemsSource

这里提出类似于我的问题的问题,但我没有在那里找到解决方案.

我的问题:如何将不同数据(比如Lists)绑定到不同行中每个ComboBox的"DataGridComboBoxColumn".这是我试过的代码

XAML:

<Grid>
    <DataGrid x:Name="dg_TimeTable" AutoGenerateColumns="False" Margin="0,0,0,97" ColumnWidth="*">
        <DataGrid.Columns>
            <DataGridTextColumn IsReadOnly="True" Binding="{Binding CLASS}" Header="CLASS" />

            <DataGridComboBoxColumn Header="PERIOD" x:Name="gPeriods" SelectedValueBinding="{Binding PERIOD, Mode=TwoWay}" DisplayMemberPath="{Binding PERIOD}" />

            <DataGridComboBoxColumn Header="TEACHERS" x:Name="gTeachers" SelectedValueBinding="{Binding TEACHER, Mode=TwoWay}" DisplayMemberPath="{Binding TEACHER}" />

            <DataGridComboBoxColumn Header="SUBJECTS" x:Name="gSubjects" SelectedValueBinding="{Binding SUBJECT, Mode=TwoWay}" DisplayMemberPath="{Binding SUBJECT}"/>
        </DataGrid.Columns>
    </DataGrid>
</Grid>
Run Code Online (Sandbox Code Playgroud)

的.cs

using System.Collections.ObjectModel; // For ObservableCollection

public partial class MainWindow : Window
{
    ObservableCollection<string> listTeachersSix = null;
    ObservableCollection<string> listTeachersSeven = null;
    ObservableCollection<string> listTeachersEight = null;
    ObservableCollection<string> listTeachersNine = null;
    ObservableCollection<string> listTeachersTen = null; …
Run Code Online (Sandbox Code Playgroud)

c# wpf wpfdatagrid datagridcomboboxcolumn

7
推荐指数
1
解决办法
2035
查看次数