Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何使用可绑定转换器参数制作转换器?_Wpf_Xaml_.net 4.0_Converter - Fatal编程技术网

Wpf 如何使用可绑定转换器参数制作转换器?

Wpf 如何使用可绑定转换器参数制作转换器?,wpf,xaml,.net-4.0,converter,Wpf,Xaml,.net 4.0,Converter,大多数转换器不带任何参数或一个固定参数,并且易于绑定到: <local:MyConverter x:Key="MyConverterInstance" /> <TextBox Text="{Binding Path=MyTime, Converter={StaticResource MyConverterInstance}, ConverterParameter='yyyy/MM

大多数转换器不带任何参数或一个固定参数,并且易于绑定到:

<local:MyConverter x:Key="MyConverterInstance" />

<TextBox Text="{Binding Path=MyTime, 
                        Converter={StaticResource MyConverterInstance},
                        ConverterParameter='yyyy/MM/dd'}" />

但是,如果我想让这种格式成为用户可以更改的动态属性,我不能这样做,对吗

<TextBox Text="{Binding Path=MyTime, 
                        Converter={StaticResource MyConverterInstance},
                        ConverterParameter={Binding Path=UserFormat}}" />

因此,我唯一的选择是在MyConverter上定义DependencyProperty进行绑定。但我的转换器定义是静态资源。我不能去

<local:MyConverter x:Key="MyConverterInstance" 
                   Format="{Binding Path=UserFormat}"/>


因为StaticResources上没有DataContext。如何设置此选项?

您不能绑定到converterparameter,但可以使用多重绑定。 例如: 或

(阿兰)所以,只要把这个链接的答案翻译成与这个问题相匹配的东西:

<TextBlock>
    <TextBlock.Resources>
        <local:MyConverter x:Key="MyConverterInstance" />
    </TextBlock.Resources>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource converter}">
            <Binding Path="MyTime" />
            <Binding Path="UserFormat" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

public class MyConverter : IMultiValueConverter
{
  public object Convert(object[] values, Type targetType, object parameter,
      System.Globalization.CultureInfo culture)
  {
    DateTime time = (DateTime)values[0];
    string format = values[1].ToString();
    return time.ToString(format);
  }

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

公共类MyConverter:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,
System.Globalization.culture(信息文化)
{
DateTime时间=(DateTime)值[0];
字符串格式=值[1]。ToString();
返回时间.ToString(格式);
}
公共对象[]转换回(对象值,类型[]目标类型,对象参数,
System.Globalization.culture(信息文化)
{
抛出新的NotImplementedException();
}
}

不能绑定到converterparameter,但可以使用多重绑定。 例如: 或

(阿兰)所以,只要把这个链接的答案翻译成与这个问题相匹配的东西:

<TextBlock>
    <TextBlock.Resources>
        <local:MyConverter x:Key="MyConverterInstance" />
    </TextBlock.Resources>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource converter}">
            <Binding Path="MyTime" />
            <Binding Path="UserFormat" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

public class MyConverter : IMultiValueConverter
{
  public object Convert(object[] values, Type targetType, object parameter,
      System.Globalization.CultureInfo culture)
  {
    DateTime time = (DateTime)values[0];
    string format = values[1].ToString();
    return time.ToString(format);
  }

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

公共类MyConverter:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,
System.Globalization.culture(信息文化)
{
DateTime时间=(DateTime)值[0];
字符串格式=值[1]。ToString();
返回时间.ToString(格式);
}
公共对象[]转换回(对象值,类型[]目标类型,对象参数,
System.Globalization.culture(信息文化)
{
抛出新的NotImplementedException();
}
}

好的,那么如果我们有上面的XAML,这相当于您的链接问题解决方案,我如何将其与我的转换器相适应-其中“MyTime”应该进入“Value”参数,而“UserFormat”应该进入“parameter”参数。记住converter convert方法的签名是
public object convert(对象值,类型targetType,对象参数,CultureInfo-culture)
。如果您从IMultiValueConverter继承,您将拥有一个值数组。好的,那么如果我们有上面的XAML,它相当于您的链接问题解决方案,我如何使它适合我的转换器-其中“MyTime”应该进入“Value”参数,而“UserFormat”应该进入“parameter”参数。记住converter convert方法的签名是
public object convert(对象值,类型targetType,对象参数,CultureInfo-culture)
。如果从IMultiValueConverter继承,则将有一个值数组。