我有一个测试Multibinding的项目。我想将textBox2和textBox3中的绑定数据绑定到textBox1。我一次又一次地尝试但仍然有错误。
XAML:
<Window x:Class="Test_Multibiding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="621"
xmlns:c="clr-namespace:Test_Multibiding">
<Window.Resources>
<c:StringFormatConverter x:Key="StrConverter"/>
</Window.Resources>
<Grid>
<TextBox TextWrapping="Wrap" AcceptsReturn="True" Height="269" HorizontalAlignment="Left" Margin="376,22,0,0" Name="textBox1" VerticalAlignment="Top" Width="211" >
<TextBox.Text>
<MultiBinding Converter="{StaticResource StrConverter}" StringFormat="test {0} test {1} blabla">
<Binding ElementName="textBox2" Path="Text"/>
<Binding ElementName="textBox3" Path="Text"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
<TextBox Height="40" HorizontalAlignment="Left" Name="textBox2" VerticalAlignment="Top" Width="222"/>
<TextBox Height="40" HorizontalAlignment="Left" Name="textBox3" VerticalAlignment="Top" Width="222"/>
</Grid>
主窗口
namespace Test_Multibiding
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public class StringFormatConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
return string.Format(parameter.ToString(), values);
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException("Cannot convert back");
}
}
}
}
我得到了错误:
The tag 'StringFormatConverter' does not exist in XML namespace 'clr-namespace:Test_Multibiding'.
那么请告诉我哪里有问题?
答案 0 :(得分:4)
这里有一些问题。首先,您不需要转换器。 StringFormat
的{{1}}属性会为您执行此操作。其次,如果您想使用自定义转换器,则需要在MultiBinding
上设置ConverterParameter
,而不是MultiBinding
。
现在,您的转换器不在该命名空间中的原因:您在窗口类中声明了它。转换器的全名是StringFormat
。如果您将类更改为:
Test_Multibiding.MainWindow.StringFormatConverter
将有Converter
)
NullReferenceException
答案 1 :(得分:2)
您只需要将 StringFormatConverter 移出 MainWindow 类,如下所示:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
public class StringFormatConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
return string.Format(parameter.ToString(), values);
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException("Cannot convert back");
}
}
答案 2 :(得分:1)
StringFormatConverter
是MainWindow
的子类,不会显示在Test_Multibiding
的根名称空间中。
将StringFormatConverter
的声明移到MainWindow范围之外,但将其保留在Test_Multibiding
命名空间中。