用户控件的Func属性

时间:2010-07-13 15:20:44

标签: wpf user-controls dependency-properties

我有一个用户控件,我想添加一个Func类型的依赖项属性,所以我可以在XAML中为它分配一个方法处理程序。但是,这将导致XAMLParseException:'Func`2'类型没有公共TypeConverter类。我究竟做错了什么?我是否需要为Func实现TypeConverter还是有更好的方法吗?

用户控件中的Func依赖项属性(MyUserControl):

public Func<int, int> MyFunc
{
    get { return (Func<int, int>)GetValue(MyFuncProperty); }
    set { SetValue(MyFuncProperty, value); }
}

public static readonly DependencyProperty MyFuncProperty =
    DependencyProperty.Register("MyFunc", 
                                typeof(Func<int, int>), 
                                typeof(SillyCtrl), 
                                new UIPropertyMetadata(null));

使用DP,XAML的示例:

<Window x:Class="FuncTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:FuncTest="clr-namespace:FuncTest"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <FuncTest:MyUserControl MyFunc="SquareHandler" />
    </Grid>
</Window>

代码背后:

namespace FuncTest
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            SquareHandler = (arg => arg * arg);

            DataContext = this;
        }

        public Func<int, int> SquareHandler { get; set; }
    }
}

1 个答案:

答案 0 :(得分:5)

MyFunc="SquareHandler"

表示将“MyFunc”属性设置为“SquareHandler”字符串,这就是为什么它会要求您提供能够将字符串转换为Func的TypeConverter,将其更改为

<FuncTest:MyUserControl MyFunc="{Binding SquareHandler}" />

使用当前DataContext的SquareHandler属性。