Wpf DataGrid中的附加属性

Wpf DataGrid中的附加属性,wpf,datagrid,attached-properties,Wpf,Datagrid,Attached Properties,我使用附加属性将文本框和文本块的输入限制为数字或字母。现在,我想将此附加属性应用于datagridtextcolumn。 我尝试了以下方法: <DataGridTextColumn Header="Max" Width="50" Binding="{Binding Path=Max, Mode=TwoWay" Helper:InputService.Num

我使用附加属性将文本框和文本块的输入限制为数字或字母。现在,我想将此附加属性应用于datagridtextcolumn。 我尝试了以下方法:

<DataGridTextColumn Header="Max" Width="50"
                                  Binding="{Binding Path=Max, Mode=TwoWay"
                                  Helper:InputService.NumericOnly="True">

您的属性实现只需要在
TextBox
TextBlock
上设置。我建议您在代码中设置一个断点,并检查实际设置的控件类型——我怀疑您会发现它是单元格的父容器,而不是文本控件本身

编辑:根据您的评论,您可能希望在绑定中包括以下内容:

Binding="{Binding Path=Max, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

这将导致绑定在每次属性更改时刷新,大多数输入控件的默认设置是在控件失去焦点时触发。

您的属性实现只希望在
文本框
文本块
上设置。我建议您在代码中设置一个断点,并检查实际设置的控件类型——我怀疑您会发现它是单元格的父容器,而不是文本控件本身

编辑:根据您的评论,您可能希望在绑定中包括以下内容:

Binding="{Binding Path=Max, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

这将导致绑定在每次属性更改时都刷新,大多数输入控件的默认设置是在控件失去焦点时触发。

好的,这对我来说是可行的:

         <DataGridTextColumn.EditingElementStyle>
            <Style TargetType="TextBox">
              <Setter Property="Helper:InputService.NumericOnly" Value="True"/>
            </Style>
          </DataGridTextColumn.EditingElementStyle>

好的,这就是对我有效的方法:

         <DataGridTextColumn.EditingElementStyle>
            <Style TargetType="TextBox">
              <Setter Property="Helper:InputService.NumericOnly" Value="True"/>
            </Style>
          </DataGridTextColumn.EditingElementStyle>


取决于属性的实现,这里没有太多关于该属性的信息。取决于属性的实现,这里没有太多关于该属性的信息。如果我在OnNumericOnlyChanged的第一行中放置断点,它永远不会到达。现在我发现已到达断点,但只有在按下回车键之后。我希望立即检查输入,否则用于绑定datagridtextcolumn的转换器将抛出异常。我怎么能这么做?谢谢你的提示,丹。不幸的是,这仍然不起作用。OnNumericOnlyChanged仅在按下enter键后到达,无论设置了什么UpdateSourceTrigger(FocusLost或PropertyChanged)。即使我删除了转换器,也没有什么不同。看起来我真正想要的是,如果单元格处于编辑模式,则只将我的属性附加到单元格。如果我直接在EditineElementStyle中使用PreviewTestInput处理程序,它的工作方式与预期的一样。如何在此处使用我的附加属性,以便不必编写代码?如果我在OnNumericOnlyChanged的第一行中放置断点,则永远不会到达该断点。现在我发现已到达断点,但只有在按下enter键之后。我希望立即检查输入,否则用于绑定datagridtextcolumn的转换器将抛出异常。我怎么能这么做?谢谢你的提示,丹。不幸的是,这仍然不起作用。OnNumericOnlyChanged仅在按下enter键后到达,无论设置了什么UpdateSourceTrigger(FocusLost或PropertyChanged)。即使我删除了转换器,也没有什么不同。看起来我真正想要的是,如果单元格处于编辑模式,则只将我的属性附加到单元格。如果我直接在EditineElementStyle中使用PreviewTestInput处理程序,它的工作方式与预期的一样。我如何在这里使用我的附加属性,这样我就不必在后面编写代码了?