2011-12-26 66 views
5

Tôi đã viết kiểm soát của tôi và cố gắng để vượt qua tham số để khởi tạo thêm nhưng có lỗi = ((Type Ajustcontrol không thể có một attribut tên) Làm thế nào để truyền dữ liệu một cách chính xác đây là mã của tôi trong C#:.?cách chuyển tham số trong hàm tạo điều khiển wpf?

public AjustControl(BaoC input) 
     { 
      InitializeComponent(); 

      populateAdjustControl(input); 

     } 

Lỗi: Lỗi 15 Loại 'AjustControl' không thể có thuộc tính Tên. Các loại giá trị và loại không có hàm dựng mặc định có thể được sử dụng làm mục trong ResourceDictionary Dòng 470 Vị trí 26. D: \ Prj \ aaa \ MainWindow. xaml 470 26 Studio

+0

Hãy sao chép-dán lỗi ban đầu từ IDE thay vì gõ lại vào bật. Dường như có một số lỗi chính tả. –

+0

Tôi đã cập nhật câu hỏi của mình khi bạn yêu cầu –

+0

Thật khó để đưa ra quyết định mà không thấy nhiều mã hơn. Nó có thể xảy ra mà bạn đang nhầm lẫn một cái gì đó, nhưng rất khó để làm cho một cái gì đó ra ngoài. –

Trả lời

19

Vì vậy, như lỗi nói, bạn không thể có điều khiển mà không có hàm tạo tham số trong xaml.Bạn vẫn có thể thêm một nếu bạn w ant để khởi tạo nó từ mã, nhưng xaml sẽ không gọi hàm tạo đó.

public AjustControl(BaoC input) : this() 
{ 
    populateAdjustControl(input); 
} 

public AjustControl() 
{ 
    InitializeComponent(); 
} 

Tuy nhiên, nếu bạn yêu cầu thêm thuộc tính tùy chỉnh vào kiểm soát, bạn có thể thêm DependancyProperty.

public static readonly DependencyProperty NameProperty= 
    DependencyProperty.Register(
    "Name", typeof(string), 
... 
    ); 
public string Name 
{ 
    get { return (string)GetValue(NameProperty); } 
    set { SetValue(NameProperty, value); } 
} 

Sau đó, bạn có thể sử dụng kiểm soát của bạn như

<custom:AjustControl Name="something" /> 
+0

Xin lỗi vì đã tìm ra câu trả lời cũ, nhưng tôi đang cố gắng đạt được điều này. Vấn đề của tôi là tôi cần tham số này trong hàm tạo (để có thể tải dữ liệu). Tuy nhiên, thuộc tính dependency dường như chỉ được thiết lập sau hàm tạo. Bạn có một ý tưởng làm thế nào tôi có thể làm điều đó? – Shimrod

+0

Một thuộc tính là một phần của một đối tượng thể hiện, nó không thể được thiết lập trước khi lớp được khởi tạo với một hàm tạo, trừ khi thuộc tính là tĩnh. –

+2

Thật vậy. Cuối cùng tôi đã sử dụng sự kiện 'Loaded' để tải dữ liệu của mình, vì DP được đặt tại thời điểm này. Cảm ơn ! – Shimrod

0

Nó không phải là rõ ràng từ câu hỏi của bạn tại sao bạn cần phải vượt qua các tham số cho constructor của điều khiển tùy chỉnh.

  1. Nó có thể là bởi vì bạn cần điều khiển tùy chỉnh để tiêu thụ các thông số vi phạm trước khi bất kỳ giá trị ràng buộc được truyền từ điều khiển tùy chỉnh để cha mẹ qua cơ chế bất động sản phụ thuộc - tính đáng chú ý nhất ràng buộc đó sẽ tiêu thụ các tham số nhà xây dựng vi phạm trực tiếp hoặc gián tiếp.

  2. Có thể do khởi tạo thông qua hàm tạo tham số là cách duy nhất để đi cho bạn vì bất kỳ lý do gì.

Tôi không biết giải pháp nào cho trường hợp 2. Nhưng khi câu hỏi này phát sinh trường hợp 1 là yêu cầu thông thường. Trong trường hợp này, giải pháp của tôi là tạo một thuộc tính Net dot thông thường. Điều này sẽ được giải quyết trước bất kỳ thuộc tính phụ thuộc nào.

Nhưng có thể có sự cố với thuộc tính Net điểm thông thường. Làm thế nào để bạn liên kết với một tham chiếu? Kiểm soát trong cây thị giác, ví dụ: Có một giải pháp cho việc này, nhưng chỉ có sẵn trong phiên bản XAML mới hơn. Bạn có thể viết

<MyCustomControl MyParameter="{x:Reference Name=Blah}"/> 

thay vì

<MyCustomControl MyNonParameter="{Binding ElementName=Blah}"/> 

Và bạn không cần phải tạo ra một DP cho điều đó. Trong điều khiển custrom của bạn, bạn chỉ có thể viết

class MyCustomControl { 
    // The parameter my constructor sadly can not have 
    public MyParameterType MyParameter { get; set; } 
Các vấn đề liên quan