2010-03-28 57 views
7

Tôi đang sử dụng MVVM và đang cố gắng databind thuộc tính Nguồn của Hình ảnh thành ViewModel của tôi theo cách mà tôi có thể thay đổi biểu tượng khi đang di chuyển. Mô hình tốt nhất để theo dõi điều này là gì? Tôi vẫn có sự linh hoạt để thay đổi ViewModel của mình cho phù hợp, nhưng tôi không biết bắt đầu từ đâu trong xaml hoặc ViewModel.Hình ảnh dữ liệu WPF Image.Source trong MVVM

Để rõ ràng, tôi không muốn ViewModel của mình biết về các hình ảnh cụ thể (đó là cho Chế độ xem biết), chỉ trạng thái kích hoạt các hình ảnh khác nhau. Bây giờ tôi chỉ có hai tiểu bang, cho phép nói Red và Green. Tôi có nên tạo một thuộc tính Enum hoặc một bool không? Và sau đó làm thế nào để tôi databind để chuyển đổi nguồn hình ảnh?

Trả lời

10

Bạn có thể sử dụng DataTrigger và thay đổi hình ảnh (hoàn toàn bằng XAML) dựa trên giá trị của thuộc tính trong ViewModel của bạn. Tôi, cá nhân, sẽ sử dụng một enum, vì bạn có thể muốn nhiều tiểu bang.

VisualStateManager sẽ làm việc cho điều này là tốt, nhưng sẽ đòi hỏi WPF Futures hoặc .NET 4.

Để sử dụng một DataTrigger, bạn có thể làm điều gì đó như:

<Image> 
    <Image.Style> 
    <Style TargetType="Image"> 
     <Setter Property="Source" Value="1.png" /> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding ViewModelEnumProperty}" Value="Image2"> 
      <Setter Property="Source" Value="2.png" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Image.Style> 
</Image> 

này sẽ sử dụng " 1.png ", nhưng khi enum của bạn được đặt thành" Image2 "trong VM, nó sẽ chuyển sang 2.png. Bạn có thể thêm DataTriggers nếu cần.

+0

Tôi đang sử dụng .Net 4. Bạn có thể giải thích về điều này không? Có thể là một ví dụ? – BrettRobi

+0

Tôi là giải pháp thứ hai của Reed. Sử dụng một enum trong viewmodel của bạn và một datatrigger trong view của bạn. http://msdn.microsoft.com/en-us/library/system.windows.datatrigger.aspx –

+0

@BrettRobi: có bạn đi –

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