【问题标题】:WPF datagrid binding error on datagridtextcolumn.ElementStyledatagridtextcolumn.ElementStyle 上的 WPF 数据网格绑定错误
【发布时间】:2019-03-08 20:40:53
【问题描述】:

我在 wpf datagrid 中编写了以下代码

<DataGridTextColumn Binding="{Binding comments}" Width="350" Header="Comments"  IsReadOnly="False" >
    <DataGridTextColumn.ElementStyle>
        <Style>
            <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
            <Setter Property="TextBlock.TextAlignment" Value="Left"/>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

并得到下面的错误,但网格工作正常。谁能帮我确定我收到以下错误的原因。

System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“DataRowView”(HashCode=43816328)上找不到“cmets”属性。绑定表达式:路径=cmets; DataItem='DataRowView' (HashCode=43816328);目标元素是'TextBlock'(名称='');目标属性是“文本”(类型“字符串”)

【问题讨论】:

  • 您使用的列绑定不正确。建议你把datagrid的所有代码贴出来。
  • 谢谢 Babbillumpa。您的 cmets 和 Peregrine 发布的示例代码帮助很大。我在绑定表达式中拼错了列名 Comments。而不是大写的“C”,我有一个小写的“c”,这导致了绑定表达式错误。

标签: c# wpf data-binding


【解决方案1】:

请发布Minimal, Complete, and Verifiable example 以重现您的问题。

下面的代码对我来说很好。

DataItem.cs

public class DataItem
{
    public string A => "AAAAAAAAAA AAAAAAAAAA";

    public string B => "BBBBBBBBBB";

    public string C => "CCCCCCCCCC";
}

MainViewModel.cs

public class MainViewModel
{
    public MainViewModel()
    {
        DataItems = new List<DataItem>();

        for (var i = 1; i <= 20; i++)
            _dataItemList.Add(new DataItem());
    }

    public List<DataItem> DataItems {get;}
}

MainView.xaml

<Window ...>
    <Window.DataContext>
        <local:MainViewModel/>
    </Window.DataContext>

    <DataGrid Margin="16" ItemsSource="{Binding DataItems}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="A" Binding="{Binding A}" Width="100">
                <DataGridTextColumn.ElementStyle>
                     <Style>
                        <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
                        <Setter Property="TextBlock.TextAlignment" Value="Left"/>
                     </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>

            <DataGridTextColumn Header="B" Binding="{Binding B}"/>

            <DataGridTextColumn Header="C" Binding="{Binding C}"/>
        </DataGrid.Columns>
    </DataGrid>
</Window>

【讨论】:

  • 嗨 Peregrine,感谢您提供示例。我执行了您的代码并将其与我的代码进行了比较,发现在 Binding 中我拼错了列名“Comments”。我有一个小写 C 而不是大写 C,这导致了绑定路径表达式错误。
  • @NirmalKumarAndrews 绑定错误将在您的应用程序运行时显示在 Visual Studio 的输出窗口中。
猜你喜欢
  • 1970-01-01
  • 2011-09-28
  • 2010-11-15
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多