【问题标题】:Unable to bind DataGridTemplateColumn ComboBox editing template无法绑定 DataGridTemplateColumn ComboBox 编辑模板
【发布时间】:2012-07-05 19:26:39
【问题描述】:

以下是我的 DataGrid XAML:

 <DataGrid Visibility="Visible" Margin="20" ItemContainerStyle="{x:Null}" OverridesDefaultStyle="False" CellStyle="{x:Null}" Style="{x:Null}" RowStyle="{x:Null}" ColumnHeaderStyle="{x:Null}" Foreground="Black" CanUserAddRows="True" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Path=MovieList}">
        <DataGrid.Columns>

            <DataGridTextColumn Binding="{Binding Title, Mode=TwoWay}" CanUserResize="True" MaxWidth="450" CanUserSort="True" Header="Title" Width="200" />

            <DataGridTemplateColumn Width="130" Header="Type">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Type}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox Width="120" ItemsSource="{Binding Path=GenreList}" DisplayMemberPath="Name" SelectedValuePath="ID" Height="Auto" HorizontalAlignment="Center" Name="comboBox1" VerticalAlignment="Top" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

单元格编辑模板有一个绑定到可观察集合“GenreList”的组合框。此集合在 ViewModel 中初始化。未填充 ComboBox 的原因可能是什么?

【问题讨论】:

  • GenreList 是在 DataGrid 的 ViewModel 中还是在 DataGridRow 的 ViewModel 中?只是猜测,但请尝试ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.GenreList}

标签: wpf templates datagrid combobox


【解决方案1】:

你没有进入你的 ViewModel。您需要前往源 - 绑定到您的 ViewModel 的视觉元素。例如,如果它一直在视图上,假设它是 UserControl 类型,以下将起作用:

<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=GenreList}".... />

另一种方式,如果您想确保从正确的元素而不是类型的基础中选择绑定,请为绑定到您的 ViewModel 的元素命名(我将使用相同的 UserControl)

<UserControl x:Name="me".../>

   <ComboBox ItemsSource="{Binding ElementName=me, Path=DataContext.GenreList}".... />

【讨论】:

  • 如果它是UserControl 的属性,它将起作用,否则如果它在DataContext 中,则需要DataContext.GenreList
猜你喜欢
  • 2014-04-14
  • 2011-10-28
  • 2012-04-07
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 2016-01-21
相关资源
最近更新 更多