有XAML:
<TextBlock Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" Text="+1Amf">
<TextBlock.Style>
<MultiBinding Converter="{StaticResource ValueToTextBlockStyleConverter}" ConverterParameter="0">
<Binding Path="ExpertSystemIndexes.C"/>
<Binding Path="VM.SelectedExperiment.Result2.ExpertSystemIndexes.C"/>
</MultiBinding>
</TextBlock.Style>
</TextBlock>
我有50个不同的参数:ExpertSystemIndexes.C,ExpertSystemIndexes.D,ExpertSystemIndexes.E ......
基本上,我需要根据这些和ConverterParameter值将相同的视觉样式应用于不同的文本块。 当然,我可以将此代码复制/粘贴50次。但我希望有更好的方法来做到这一点。
答案 0 :(得分:1)
如果我没有误解你的问题,你不需要重复这三行代码。要将这三行转换成一行,我们创建一个继承MultiBinding的类
继承MultiBinding的类
public class MyMultiBinding : MultiBinding
{
static IMultiValueConverter converter = new MyConverter();//ValueToTextBlockStyleConverter
object myConverterParameter;
public object MyConverterParameter
{
set { myConverterParameter = value; this.ConverterParameter = value; }
}
string binding1Path;
public string Binding1Path
{
set { binding1Path = value; this.Bindings.Add(new Binding(value)); }
}
string binding2Path;
public string Binding2Path
{
set { binding2Path = value; this.Bindings.Add(new Binding(value)); }
}
public MyMultiBinding()
{
this.Converter = converter;
}
}
现在让我们在xaml中使用这个类
<TextBox>
<TextBox.Text>
<local:MyMultiBinding Binding1Path="Text1" Binding2Path="Text2" MyConverterParameter="0"/>
</TextBox.Text>
</TextBox>
转换器
public class MyConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string myValue = string.Empty;
foreach (var item in values)
{
if (item != null)
myValue += item.ToString();
}
return myValue;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
这与您的代码不完全相同。我在这里尝试的只是让你知道如何将这三行转换成一行。我希望这会有所帮助。