silverlight - 如何使用代码隐藏变量作为 ValueConverter 中 ConverterParameter 的输入

标签 silverlight data-binding silverlight-3.0 valueconverter

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

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

为此,我想将字段级变量作为 ValueConverter 的 ConverterParameter 传递。我尝试了几种方法,主要是使用这个 this question 中的想法除了我总是在解析 xaml 时遇到错误(并且应用程序无法加载)。

一个解决方法可能是向 ItemsSource 中的对象添加一个属性,但我真的不想这样做。部分原因是该对象在多个项目中使用,所以我不想更改 i .... 并且因为我想看看其他方法是否可行。我也相信 wpf 有一个多值转换器(可能还有 SL 4.0),但我使用的是 SL 3.0。

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

那么几个问题:

  • 这可以按照我上面的描述来完成吗?
  • 如果不是,问题是什么?
  • 如果不是,是否有另一种不向对象添加属性的方法?

最佳答案

在我看来,您不想在这种情况下使用绑定(bind) ConverterParameter。如果我对您的理解是正确的,您在 UserControl 级别保留了一个值,您希望将其分配给此参数,因此所有实例的参数值都将相同。

相反,我会采用的方法是向 Converter 代码本身添加一个属性。

 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>

如果您需要修改 UserControl 代码中的值,您将使用:-

((ExampleConverter)Resources["conv"]).SpecialValue = someOtherVariable;

关于silverlight - 如何使用代码隐藏变量作为 ValueConverter 中 ConverterParameter 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4392316/

相关文章:

silverlight - 在哪里可以找到我正在浏览的 silverlight 应用程序的 xap 文件?

c# - WPF中的嵌套ObservableCollection数据绑定(bind)

silverlight - 是否有适用于 Windows Phone 7.5 (Mango) 的 ListCollectionView 或 PagedCollectionView 类

class - Vue中一个条件绑定(bind)多个类

silverlight - 将数据添加到 silverlight HTTP POST 异步

Silverlight 3 - 超出浏览器 HtmlPage.Window.Navigate

c# - 如何在 SilverLight 中为元素创建自己的属性

android - 找不到带有参数的属性的 setter

c# - WPF:在 ListView 的 ObservableCollection 外部绑定(bind)

javascript - Silverlight 不正确地传递 JSON 对象?