2011-01-06 11 views
8

Tôi có vấn đề đơn giản với thuộc tính ràng buộc trong lớp mô hình khung nhìn trên thuộc tính Tiêu đề của WPF Window- nó là vỏ.Vấn đề với sự ràng buộc Tiêu đề của cửa sổ WPF trên thuộc tính trong lớp mô hình xem vỏ [Caliburn.Micro]

My vỏ view nhìn như thế này:

<Window x:Class="Spirit.Views.ShellView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="{Binding Path=Title}" > 
    <Grid> 
     <ContentControl x:Name="ActiveItem" /> 
    </Grid> 
</Window> 

vỏ xem mô hình lớp:

[Export(typeof(IShellViewModel))] 
    public class ShellViewModel : Conductor<IScreen>.Collection.OneActive, IShellViewModel 
    { 
     private string _title; 

     public string Title 
     { 
      get { return _title; } 
      set 
      { 
       _title = value; 
       NotifyOfPropertyChange(()=>Title); 
      } 
     } 

     public ShellViewModel() 
     { 
      Title = "Spirit"; 
     } 
    } 

Nếu tôi chạy ứng dụng Tiêu đề của xem vỏ (cửa sổ WPF) là Namespace.ShellViewModelClass, không có giá trị thuộc tính Tiêu đề trong lớp mô hình trình xem vỏ.

Nếu tôi kích hoạt một số màn hình trong chế độ xem dạng vỏ, thuộc tính Tiêu đề của cửa sổ là Namespace.ViewModelClass.

Làm cách nào để xóa hành vi này? Cảm ơn lời khuyên.

Trả lời

20

Kể từ iScreen được định nghĩa với IHaveDisplayName và lớp Screen khuôn khổ CM có một tài sản của DisplayName, bạn chỉ cần thiết lập thuộc tính rằng trong ShellViewModel của bạn, như thế này:

public ShellViewModel() 
{ 
    base.DisplayName = "Spirit"; 
} 
+0

Điều này cho tôi một cảnh báo R # về 'Cuộc gọi thành viên ảo trong hàm tạo'. Không có một cách tốt xung quanh nó được nêu ra mặc dù. Không thể niêm phong lớp học. –

0

Hơi khó để nói từ mã bạn đã đưa ra, nhưng tôi giả định rằng bạn chỉ định DataContext của Window cho một thể hiện của ShellViewModel trong mã phía sau của bạn. Khi nào ShellViewModel được khởi tạo?

Bạn cần triển khai INotifyPropertyChanged trong ViewModel của mình cho bất kỳ thuộc tính nào bạn muốn xem giá trị thay đổi. Liên kết ở đây là tài liệu MSDN, nhưng nếu bạn tìm kiếm Google và/hoặc SO cho nó, bạn sẽ thấy rất nhiều ví dụ.

+0

tôi không phải thực hiện giao diện INotifyPropertyChanged vì tôi sử dụng Caliburn.Micro Framework và lớp mô hình Shell của tôi có nguồn gốc từ lớp Screen và điều này thực hiện giao diện này. –

+0

Xin lỗi - Tôi dựa trên câu trả lời của tôi về vị trí ban đầu của bạn, mà chỉ có mặc định có được; bộ; bất động sản. Bạn cũng có thể cập nhật câu hỏi của mình bằng mã khởi tạo ViewModel và đặt nó làm DataContext của bạn không? –

+0

Xin chào, trong khi bạn không khởi động DataContext. Ví dụ tài sản của tên Wonko trong mô hình khung nhìn được tự động ràng buộc trên điều khiển tên Wonko trong tầm nhìn. –