WPF,这个DataGrid数据绑定哪里出错了?



<Grid>
        <DataGrid Name="datagrid1" Margin="148,68,0,0" AutoGenerateColumns="False" Height="131" Width="244">
            <DataGrid.Columns>
                <DataGridTextColumn Header="科室" Width="105" Binding="{Binding Path=Name}" />
                <DataGridTextColumn Header="人数" Binding="{Binding Path=Number}" />
                <DataGridComboBoxColumn ItemsSource="{Binding Path=People}" SelectedItemBinding="{Binding Path=K_科长}" 
Header="科长" />
            </DataGrid.Columns>
        </DataGrid>       
    </Grid>



public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        ObservableCollection<Company> obc = new ObservableCollection<Company>();
        obc.Add(new Company() { Name = "人教科",Number=2,K_科长="熊俊",People=new List<string>(){"熊俊","王晓"}});
        obc.Add(new Company() { Name = "广告科", Number = 2, K_科长 = "汤姆", People = new List<string>() { "汤姆", "杰克" } });
        obc.Add(new Company() { Name = "财会科", Number = 2, K_科长 = "李莹", People = new List<string>() { "李莹", "张三" } });
        obc.Add(new Company() { Name = "人教科", Number = 4, K_科长 = "李刚", People = new List<string>() { "李刚", "王二","牛熊","刘麻子" } });
        datagrid1.ItemsSource = obc;
    }
}



class Company
{
    public string Name { get; set; }
    public int Number { get; set; }
    public string K_科长 { get; set; }
    public List<string> People { get; set; }
}



上面代码,DataGridComboBoxColumn列绑定到Pelple属性,可是为什么结果这一列没有显示呢?

11 个解决方案

#1


有人知道吗???

#2


List<string> People 不能直接绑定到DataGridComboBoxColumn列绑定到Pelple属性

需求转换成字符串

#3


这个问题我当初也遇到过。
问题是你的People里面的数据和“K_科长”的数据不是同一个引用所以绑定不会出现你希望的选择项。
你可以新建一个People类,并重载Equals,重载的目的是wpf会调用Equals比较并选择目标项。


class People
{
pubic string Name{set;get;}

 public override bool Equals(object obj)
        {
            if (this == obj) return true;

            if (obj == null || this.GetType() != obj.GetType())
            {
                return false;
            }

            People p = obj as People;
            if(p=null) return false;
            return this.Name == obj.Name;
}
}

#4


没有设置SelectedValuePath与DisplayMemberPath

#5


引用 3 楼 blwuer 的回复:
这个问题我当初也遇到过。
问题是你的People里面的数据和“K_科长”的数据不是同一个引用所以绑定不会出现你希望的选择项。
你可以新建一个People类,并重载Equals,重载的目的是wpf会调用Equals比较并选择目标项。

字符串应该是可以比较的吧,假如ItemsSource绑定到不是Pelple属性,而是一个共享的集合,都不需要作比较的

#6


引用 5 楼 u011965849 的回复:
Quote: 引用 3 楼 blwuer 的回复:

这个问题我当初也遇到过。
问题是你的People里面的数据和“K_科长”的数据不是同一个引用所以绑定不会出现你希望的选择项。
你可以新建一个People类,并重载Equals,重载的目的是wpf会调用Equals比较并选择目标项。

字符串应该是可以比较的吧,假如ItemsSource绑定到不是Pelple属性,而是一个共享的集合,都不需要作比较的

很抱歉,是我没看清楚。
你这个问题应该出在ItemsSource的绑定上。这个ItemsSource是一列的,如果你要为每一行提供不同的ItemsSource应该要做额外的处理

#7


为了弥补我看错了楼主的问题,经过搜索找到了解决楼主的问题方法。
使用模板列可以满足楼主的需求

<DataGridTemplateColumn Header="科长">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding People}" SelectedItem="{Binding Path=K_科长}"></ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

#8


问题解决了吗?

#9


引用 7 楼 blwuer 的回复:
为了弥补我看错了楼主的问题,经过搜索找到了解决楼主的问题方法。
使用模板列可以满足楼主的需求

<DataGridTemplateColumn Header="科长">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding People}" SelectedItem="{Binding Path=K_科长}"></ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

用模板列是可以解决,不过,我在MSDN上却找不到说ItemsSource必须是列的所有单元格都具有相同的集合。而且我那样设置,也实在不知道错在哪里

#10


没有指定DataGrid对应的ItemsSource

#11


DataGridComboBoxColumn的ItemsSource是使用的外部设置的DataContext对象的属性进行绑定的,而不是每个Items对象的属性进行绑定的。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号