Ger*_*ton 3 data-binding silverlight silverlight-3.0 valueconverter
我有一个ListBox,我将ItemsSource设置为从WCF服务填充的CollectionViewSource.我在ListBox.ItemTemplate\DataTemplate中使用值转换器来转换ItemsSource中对象的属性.
这一切都按预期工作,但现在我需要更新转换过程,以便转换后的值仍然基于单个对象属性值,除非另一个属性等于特定值.并且该值在xaml后面的代码中设置,这是在页面构造函数中设置的字段级变量.
为此,我想将字段级变量作为ValueConverter的ConverterParameter传递.我已经尝试了几种方法,主要使用这个问题的想法,除了我总是得到一个错误解析xaml(并且应用程序无法加载).
一个修复可能是添加属性到ItemsSource中的对象,但我真的不想这样做.部分是因为该对象在几个项目中使用,所以我不想改变我......因为我想看看其他方法是否可行.另外我相信wpf有一个MultiValue转换器(也许是SL 4.0),但我在SL 3.0上.
我的猜测是到目前为止我遇到的问题是因为加载,绑定和解析xaml的时间.
所以有几个问题:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
现在您已将此转换器添加到UserControl资源: -
<UserControl.Resources>
<local:ExampleConverter x:Key="conv" SpecialValue="-1" />
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)
如果您需要修改UserControl代码中的值,您将使用: -
((ExampleConverter)Resources["conv"]).SpecialValue = someOtherVariable;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1550 次 |
| 最近记录: |