C# WPF:如何查找所有绑定关系

C# WPF:如何查找所有绑定关系,c#,wpf,c#-4.0,C#,Wpf,C# 4.0,在我的文本框中,我绑定到dataRowView。我的约束关系是: 文本框--绑定--DataRowView 或 文本框--绑定--属性--绑定--DataRowView 有时我不会直接创建文本框和DataRowView的绑定 我需要在文本框中设置MaxLength。 在文本框I中设置MaxLength的第一个关系中,使用 但我发现第二个关系有问题。当我将文本框绑定到属性,将属性绑定到datarowView时,我不知道如何找到datarowView 简单代码-xaml: <Window.Re

在我的文本框中,我绑定到dataRowView。我的约束关系是:

文本框--绑定--DataRowView

文本框--绑定--属性--绑定--DataRowView

有时我不会直接创建文本框和DataRowView的绑定

我需要在文本框中设置MaxLength。 在文本框I中设置MaxLength的第一个关系中,使用 但我发现第二个关系有问题。当我将文本框绑定到属性,将属性绑定到datarowView时,我不知道如何找到datarowView

简单代码-xaml:

<Window.Resources>
    <l:Behaviors x:Key="BehaviorsStringInput" x:Shared="False">
        <l:RestrictStringInputBehavior/>
    </l:Behaviors>
    <Style x:Key="tb" TargetType="{x:Type TextBox}">
        <Setter Property="l:SupplementaryInteraction.Behaviors" Value="StaticResource BehaviorsStringInput}"/>
    </Style>
</Window.Resources>
<StackPanel Orientation="Vertical">        
    <TextBox x:Name="tb1" Text="{Binding ElementName=_this,Path=MyText}" Width="300" Height="20" Margin="10" Style="{StaticResource tb}"/>
    <TextBox x:Name="tb2" Width="300" Height="20" Margin="10"/>
</StackPanel>
限制字符串输入:

public class RestrictStringInputBehavior : Behavior<TextBox>
{
    protected override void OnAttached()
    {
        AssociatedObject.Loaded += (sender, args) => setmaxlength();
        base.OnAttached();
    }
    private void setmaxlength()
    {
        object context = AssociatedObject.DataContext;
        BindingExpression binding = AssociatedObject.GetBindingExpression(TextBox.TextProperty);            
        if (context != null && binding != null)
        {
            if (context is DataRowView)
            {
                DataRowView drv = (DataRowView)context;
                // bingin.ParentBinding.Path.Path for tb1 has TextValue value and is correct, but for tb2 value is MyText.
                DataColumn dc = drv.Row.Table.Columns[binding.ParentBinding.Path.Path];
                if (dc != null)
                {
                    AssociatedObject.MaxLength = dc.MaxLength;
                }
公共类RestrictStringInputBehavior:行为
{
受保护的覆盖无效附加()
{
AssociatedObject.Loaded+=(发送方,参数)=>setmaxlength();
base.onatached();
}
私有void setmaxlength()
{
对象上下文=AssociatedObject.DataContext;
BindingExpression binding=AssociatedObject.GetBindingExpression(TextBox.TextProperty);
if(上下文!=null&&binding!=null)
{
if(上下文为DataRowView)
{
DataRowView drv=(DataRowView)上下文;
//tb1的bingin.ParentBinding.Path.Path具有TextValue值且正确,但tb2的值为MyText。
DataColumn dc=drv.Row.Table.Columns[binding.ParentBinding.Path.Path];
如果(dc!=null)
{
AssociatedObject.MaxLength=dc.MaxLength;
}

您可以添加代码示例吗?那么最大长度应该如何计算?为什么不将其绑定到另一个属性或数据行视图(使用转换器提取所需的长度)?@user1672994:我添加了非常简单的代码来解决我的问题。@PieterWitvoet:有时当DataRowView为null时,我无法在userControl中创建绑定(我是绑定方面的begginer)。好吧,绑定通常是在xaml中设置的,而且它们很少被“检查”以获取更多信息。为什么不将
MaxLength
绑定到一个单独的属性?此视图的视图模型代码是什么样子的?
public class RestrictStringInputBehavior : Behavior<TextBox>
{
    protected override void OnAttached()
    {
        AssociatedObject.Loaded += (sender, args) => setmaxlength();
        base.OnAttached();
    }
    private void setmaxlength()
    {
        object context = AssociatedObject.DataContext;
        BindingExpression binding = AssociatedObject.GetBindingExpression(TextBox.TextProperty);            
        if (context != null && binding != null)
        {
            if (context is DataRowView)
            {
                DataRowView drv = (DataRowView)context;
                // bingin.ParentBinding.Path.Path for tb1 has TextValue value and is correct, but for tb2 value is MyText.
                DataColumn dc = drv.Row.Table.Columns[binding.ParentBinding.Path.Path];
                if (dc != null)
                {
                    AssociatedObject.MaxLength = dc.MaxLength;
                }