Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
Silverlight 如何使用codebehind变量作为ValueConverter中ConverterParameter的输入_Silverlight_Data Binding_Silverlight 3.0_Valueconverter - Fatal编程技术网

Silverlight 如何使用codebehind变量作为ValueConverter中ConverterParameter的输入

Silverlight 如何使用codebehind变量作为ValueConverter中ConverterParameter的输入,silverlight,data-binding,silverlight-3.0,valueconverter,Silverlight,Data Binding,Silverlight 3.0,Valueconverter,我有一个列表框,其中我将ItemsSource设置为从WCF服务填充的CollectionViewSource。我使用ListBox.ItemTemplate\DataTemplate中的值转换器来转换ItemsSource中对象的属性 这一切都按预期进行,但现在我需要更新转换过程,以便转换后的值仍然基于单个对象属性值,除非其他属性等于特定值。该值在xaml的代码隐藏中设置,这是在页面构造函数中设置的字段级变量 为此,我希望将字段级别变量作为ValueConverter的ConverterPar

我有一个列表框,其中我将ItemsSource设置为从WCF服务填充的CollectionViewSource。我使用ListBox.ItemTemplate\DataTemplate中的值转换器来转换ItemsSource中对象的属性

这一切都按预期进行,但现在我需要更新转换过程,以便转换后的值仍然基于单个对象属性值,除非其他属性等于特定值。该值在xaml的代码隐藏中设置,这是在页面构造函数中设置的字段级变量

为此,我希望将字段级别变量作为ValueConverter的ConverterParameter传递。我已经尝试了几种方法,主要是使用本文中的思想,但我总是在解析xaml时出错(并且应用程序无法加载)

一种修复方法可能是向ItemsSource中的对象添加一个属性,但我真的不想这样做。部分原因是该对象已在多个项目中使用,因此我不想更改I。。。。因为我想看看另一种方法是否可行。另外,我相信wpf有一个多值转换器(可能还有SL4.0),但我使用的是SL3.0

我猜到目前为止我遇到的问题是因为加载、绑定和解析xaml的时间

所以有几个问题:

  • 这能像我上面描述的那样吗
  • 如果不是,问题是什么
  • 如果没有,是否有其他方法不向对象添加属性

在这种情况下,听起来您不想使用binding
ConverterParameter
。如果我正确地理解了您的意思,那么在UserControl级别有一个值,您希望将其分配给这个参数,因此所有实例的参数值都是相同的

相反,我将采取的方法是向转换器代码本身添加属性

 public class ExampleConverter : IValueConverter
 {

    public int SpecialValue { get; set; }

    public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
        {
             if (value.Equals(SpecialValue))
                 return "Special!";
             else
                 return value.ToString();
        }
        else
        {
             return null;
        }
    }

    public override object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
现在将此转换器添加到UserControl资源中:-

<UserControl.Resources>
   <local:ExampleConverter x:Key="conv" SpecialValue="-1" />
</UserControl.Resources>

感谢这项工作,我怀疑我在测试中遇到的一些问题是,我将转换器作为一种资源放置在主网格中,而不是用户控制中。
((ExampleConverter)Resources["conv"]).SpecialValue = someOtherVariable;