首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Converter中的绑定?

Converter中的绑定?
EN

Stack Overflow用户
提问于 2012-03-28 09:45:04
回答 3查看 592关注 0票数 1

我正在尝试制作一个从DependencyObject继承的自定义转换器,但它不起作用:

转换器:

代码语言:javascript
复制
public class BindingConverter : DependencyObject , IValueConverter
{
  public object Value
  {
    get { return (object)GetValue(ValueProperty); }
    set { SetValue(ValueProperty, value); }
  }
  public static readonly DependencyProperty ValueProperty =
      DependencyProperty.Register("Value", typeof(object), typeof(BindingConverter), new PropertyMetadata(null));


  public object Convert(object value, Type targetType, object parameter, Globalization.CultureInfo culture)
  {
    Debug.Assert(Value != null); //fails
    return Value;
  }

  public object ConvertBack(object value, Type targetType, object parameter, Globalization.CultureInfo culture)
  {
    throw new NotImplementedException();
  }
}

Xaml:

代码语言:javascript
复制
<StackPanel x:Name="this">
  <!--works-->
  <ContentControl Content="{Binding ActualHeight, ElementName=this}"/>
  <!--doesn't work-->
  <ContentControl>
    <Binding>
      <Binding.Converter>
        <BindingConverter Value="{Binding ActualHeight, ElementName=this}" />
      </Binding.Converter>
    </Binding>
  </ContentControl>
  <TextBlock Text="{Binding Animals}"/>
</StackPanel>

我错过了什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-30 01:21:48

我在我的项目中有一些地方需要类似的功能。我不能给你看确切的样本,只是一个想法:

  • 也许你必须从FrameworkElement继承,而不是IValueConverter,就像这样:

公共类BindingHelper : FrameworkElement

  • 在BindingHelper类中,将Visibility设置为class,将IsHitTestVisible设置为false;

  • 要使其正常工作,请直接将其插入可视树中。在您的示例中,它应该是StackPanel的子级。因此,它将具有与其他StackPanel children;

  • then,相同的DataContext。您可以根据需要添加一个或多个依赖属性。例如,您可能具有数据源的单个属性和一些不同的属性,然后将这些属性用作转换器返回值。处理对BindingHelper类中的源属性的所有更改,并使用ElementName语法

将其他控件的输出属性更改为BindingHelper类的属性

票数 1
EN

Stack Overflow用户

发布于 2012-03-28 22:39:42

注意!ActualHeight属性的绑定在绑定时有错误!

为什么在编写转换器时继承DependencyObject?您应该只实现IValueConverter

试试看

首先通过"MyConverterResource“键在您的资源上添加MyConverter,然后可以通过以下方式在xaml端或cs端执行此操作:

代码语言:javascript
复制
//You may do it on XAML side <UserControl.Resources>...
this.Resources.Add("MyConverterResource",new MyConverter());

<TextBlock Text="{Binding ActualHeight,ElementName=this
,Converter=MyConverterResource}"/>

public class MyConverter: IValueConverter
{

public object Convert(object value, Type targetType
, object parameter,Globalization.CultureInfo culture)
 {

   return "Your Height is:"+Value.toString();
}

}

希望有帮助

票数 0
EN

Stack Overflow用户

发布于 2012-03-28 22:47:27

在Silverlight中,ActualHeightActualWidth属性不会在属性更新时发出通知。因此,绑定到它们将不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9900097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档