DataGridTemplateColumn和绑定错误? MVVM

时间:2017-04-27 12:18:03

标签: c# wpf xaml mvvm

我似乎无法弄清楚如何摆脱我遇到的绑定错误。

但是,我必须在下面的两种情况下都规定绑定工作正常,但我似乎总是在XAML中收到警告错误。

下面的代码不会在XAML中创建错误,正如我上面所说,绑定可以正常工作。绑定到dDate可以正常工作。

   <DataGridTextColumn Width="50" Header="Day" 
         SortMemberPath="dDate" IsReadOnly="True" 
         Binding="{Binding Path=dDate,
                   StringFormat={}{0:ddd}}" />

但是,如果我使用DataGridTemplateColumn并绑定到dDate,我会在XAML中收到错误,但如前所述,所有内容都应该绑定。

<DataGridTemplateColumn Width="50" Header="Day"
          SortMemberPath="dDate" IsReadOnly="True">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock 
                 Text="{Binding Path=dDate,
                        StringFormat={}{0:ddd}}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

我得到了这个错误,

enter image description here

我不确定我是否应该真正尝试解决为什么在绑定工作时发生此错误,但我似乎无法放手。

为什么会发生这种情况?

编辑:我应该提到这也发生在使用DataGridTemplateColumn的任何其他列中。

2 个答案:

答案 0 :(得分:3)

您可以使用DataType定义使用的绑定类型。

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate DataType="local:MyType">
       <TextBlock Text="{Binding MyProperty}"></TextBlock>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

或者您可以使用相对来源

<TextBlock Text="{Binding DataContext.MyProperty, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridRow}}"></TextBlock>

或者您可以使用设计时间

<TextBlock Text="{Binding MyProperty}" d:DataContext="{d:DesignInstance local:MyType}"></TextBlock>

答案 1 :(得分:1)

如果绑定在运行时工作,则无需担心。

由于某种原因,最有可能ReSharper添加这些波浪线。您可能需要学会使用它们或卸载ReSharper:)