1.DataGrid下的DataGridTemplateColumn的ComboBox绑定问题

最开始的形式

 <DataGridTemplateColumn Header="截面名称">
     <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
             <ComboBox
                 HorizontalAlignment="Stretch"
                 VerticalAlignment="Center"
                 Background="Transparent"
                 DisplayMemberPath="ShowName"
                 ItemsSource="{Binding DataContext.SecLib, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}}"
                 SelectedValue="{Binding SectionName}"
                 SelectedValuePath="ShowName" />
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>

导致这个数据一直不能绑定到SectionName上

找到了StackOverFlow中的解答:DataGridTemplateColumn 中的 WPF 数据绑定 ComboBox - 堆栈溢出 (stackoverflow.com)

                                <DataGridTemplateColumn Header="截面名称">
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <ComboBox
                                                HorizontalAlignment="Stretch"
                                                VerticalAlignment="Center"
                                                Background="Transparent"
                                                DisplayMemberPath="ShowName"
                                                ItemsSource="{Binding DataContext.SecLib, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}}"
                                                SelectedValue="{Binding SectionName, UpdateSourceTrigger=PropertyChanged}"
                                                SelectedValuePath="ShowName" />
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>

添加了 UpdateSourceTrigger=PropertyChanged后,数据成功绑定

 

假设控件的绑定源是一个int,string,double之类的数组的话,可以写一个Wrapper

类似下面这样,这样就可以直接绑定到其中的content

    public class StringWrapper:BindableBase
    {
        public StringWrapper(string content)
        {
            this.Content = content;
        }

        private string content;
        public string Content
        {
            get { return content; }
            set { content = value;RaisePropertyChanged(); }
        }
    }

 

posted on 2024-04-15 16:17  HRDK  阅读(20)  评论(0编辑  收藏  举报