2010-07-13 54 views
2

我有一個用戶控件,我想添加一個類型爲Func的依賴項屬性,這樣我就可以在XAML中爲它分配一個方法處理程序。但是,這將導致XAMLParseException:'Func`2'類型沒有公共的TypeConverter類。我究竟做錯了什麼?我是否需要爲Func實現TypeConverter還是有更好的方法?用戶控件上的Func屬性

的函數功能依賴項屬性中的用戶控件(的MyUserControl):

<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; } 
    } 
} 

回答

5
MyFunc="SquareHandler" 

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的實施例

意味着將「MyFunc」屬性設置爲「SquareH」 andler」 ,這就是爲什麼它問你能夠把字符串轉化funcs中一個類型轉換器,將其更改爲

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

使用當前的DataContext的SquareHandler財產。