双向绑定需要路径或xpath

时间:2011-10-02 17:40:12

标签: c# wpf xaml data-binding

我想根据两个文本框的文本增加进度条值。我写了这个XAML,但是当我在ProgressBar.Value中进行MultiBinding时,出现了“双向绑定需要路径或xpath”的错误

<Window.Resources>
    <local:Class1 x:Key="ConverterM"/>
</Window.Resources>

<TextBox Height="23" HorizontalAlignment="Left" Margin="157,59,0,0"
         Name="textBox1"  VerticalAlignment="Top" Width="120" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="157,108,0,0"
         Name="textBox2" VerticalAlignment="Top" Width="120" />
<ProgressBar Height="24" HorizontalAlignment="Left" Margin="120,160,0,0"
             Name="progressBar1" VerticalAlignment="Top" Width="243" >
    <ProgressBar.Value>
        <MultiBinding Converter="{StaticResource ConverterM}">
            <Binding />
            <Binding ElementName="textBox1" Path="Text" />
            <Binding ElementName="textBox2" Path="Text" />
        </MultiBinding>
    </ProgressBar.Value>
</ProgressBar>

价值转换器:

public class Class1 : IMultiValueConverter
{
    public object Convert(object[] values,
                          Type targetType,
                          object parameter,
                          System.Globalization.CultureInfo culture)
    {
        if (values[1] != null && values[2]!=null)
        {
            if (((string)values[1]).Length==((string)values[2]).Length)
            {
                return 5.0;
            }
        }
        else
        {
            return 0.0;
        }
    }

    public object[] ConvertBack(object value,
                                Type[] targetTypes,
                                object parameter,
                                System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

2 个答案:

答案 0 :(得分:2)

我认为<Binding />不是必需的。尝试删除它并更改转换器中的索引。

答案 1 :(得分:0)

  

双向绑定需要路径或xpath

如果您未在Path=上设置binding,则会发生这种情况。默认情况下,WPF binding会将Path=部分移至default

为避免这种情况,您需要为Path中指定的每个Binding提供MultiBinding。在你的情况下,有一个空的绑定没有路径定义,这就是为什么你有上述错误的经验。

我遇到了同样的问题,但接受的答案没有说出错误是什么,所以想到分享这个。