2011-07-27 35 views
9

Xin chào Tôi đang xây dựng một ứng dụng wpf trong đó một màn hình sẽ bao gồm các điều khiển người dùng khác nhau để thực hiện các ứng dụng khác nhau.Cách sử dụng Điều khiển người dùng trong WPF MVVM

Tôi muốn biết quy trình phù hợp để thực hiện việc này trong MVVM? Mỗi điều khiển của người dùng có mô hình khung nhìn riêng hay họ vẫn liên kết với các thuộc tính mô hình Xem chính không?

Vui lòng đề xuất một cách tiếp cận tốt. Cảm ơn,

Trả lời

5

Khi tôi sử dụng UserControl tôi chuyển dữ liệu qua DependencyProperties. My UserControls không có ViewModels. UserControl chỉ xử lý dữ liệu được truyền theo một cách rất đặc biệt.

Nhưng nếu tôi có Chế độ xem có chứa một số Lượt xem phụ tôi đặt trước cho mỗi Mô hình con của riêng mình. Những mô hình này tôi sẽ ràng buộc thông qua một thuộc tính của ViewModel của MainView.

Một số ví dụ:

UserControl1, Mã đằng sau:

public partial class UserControl1 : UserControl 
{ 
    public MyClass MyProperty 
    { 
     get { return (MyClass)GetValue(MyPropertyProperty); } 
     set { SetValue(MyPropertyProperty, value); } 
    } 

    public static readonly DependencyProperty MyPropertyProperty = 
     DependencyProperty.Register("MyProperty", typeof(MyClass), typeof(UserControl1), new UIPropertyMetadata(null)); 


    public UserControl1() 
    { 
     InitializeComponent(); 
    } 
} 

public class MyClass 
{ 
    public int MyProperty { get; set; } 
} 

Và việc sử dụng trong giao diện, XAML:

<Window x:Class="Sandbox.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:Sandbox="clr-namespace:Sandbox"> 
    <Grid> 
    <Sandbox:UserControl1 MyProperty="{Binding MyOtherPropertyOfTypeMyClassInMyViewModel, Mode=TwoWay}" /> 
    </Grid> 

Hope this helps

+0

hi Tôi chưa bao giờ sử dụng DependencyProperties. Bạn có thể vui lòng cho tôi một liên kết hoặc giải thích ngắn gọn cách người dùng kiểm soát nên sử dụng Thuộc tính phụ thuộc hay không. Tôi có nên tạo một kiểu cho một userControl và sau đó liên kết nó với các thuộc tính khác nhau bên trong khung nhìn? – ganeshran

+1

Tôi đã thêm một ví dụ đơn giản – WaltiD

+0

Cảm ơn WaltiD tôi sẽ thử phương pháp này. Tôi cũng có thể liên kết nó với một kiểu người dùng đã định nghĩa không? – ganeshran

1

Câu hỏi hay - nhưng tôi không nghĩ có một câu trả lời thẳng thắn nào.

Phụ thuộc rất nhiều vào hình dạng dữ liệu của bạn. Nếu các User Control khác nhau là các view khác nhau trên cùng một dữ liệu thì không có lý do gì mà họ không thể chia sẻ ViewModel giống nhau ... đó là một trong những động lực của MVVM - bạn có thể đưa ViewModel giống nhau cho các Views khác nhau để hiển thị dữ liệu theo nhiều cách khác nhau.

Nhưng sau đó một lần nữa, nếu ViewModel của bạn bắt đầu thực sự sưng lên và không có nhiều trùng lặp, sau đó chia nhỏ thành ViewModels nhỏ hơn. Có lẽ sau đó ViewModel chính của bạn chỉ trở thành một người quản lý ViewModel với một bộ sưu tập các ViewModels để phát cho các User Control khác nhau khi thích hợp?

+0

bạn là một intere sting giải pháp. Tôi sẽ cố gắng thực hiện nó. Tôi đã thử sử dụng nhiều chế độ xem nhưng không thể để họ liên lạc với nhau. Bạn có nghĩ rằng mỗi datacontext của điều khiển người dùng phải tương ứng với một loại tùy chỉnh mà là một tài sản của viewmodel chính. Điều đó có đúng theo MVVM không? – ganeshran

+0

vâng - âm thanh như một cách tiếp cận hợp lý – IanR

Các vấn đề liên quan