2009-11-03 26 views
13

Tôi muốn có một hình ảnh ràng buộc với một boolean và có nguồn gốc của hình ảnh phụ thuộc vào giá trị booleanBind Image.Source theo Boolean không có bộ chuyển đổi?

tức là đúng source = "image1" nguồn sai = "image2"

Tôi đã tự hỏi nếu có một cách để làm điều đó nội tuyến mà không cần một trình chuyển đổi.

Trả lời

40

Bạn có thể tạo kiểu trên Hình ảnh sử dụng DataTrigger để hoán đổi nguồn hình ảnh tùy thuộc vào ràng buộc. Trong ví dụ này, hình ảnh thay đổi tùy thuộc vào giá trị của boolean được gọi đơn giản là "Giá trị".

<Image Width="16"> 
     <Image.Style> 
      <Style TargetType="{x:Type Image}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Value}" Value="False"> 
         <Setter Property="Source" Value="Resources/image1.png"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Value}" Value="True"> 
         <Setter Property="Source" Value="Resources/image2.png"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Image.Style> 
    </Image> 
+0

Tính năng này có hoạt động cho các thuộc tính của các thành phần khác không? Ví dụ, nếu tôi muốn kết buộc một hình ảnh dựa trên giá trị của một nhãn, điều đó có hoạt động giống nhau không? Bạn có thể xây dựng? – user3841581

0

Nếu bạn chỉ liên kết trực tiếp thuộc tính Image::Source thì cách duy nhất để thực hiện điều này là với IValueConverter tùy chỉnh.

2

Nếu có ai đang tìm kiếm Trình chuyển đổi giá trị để ràng buộc. Đây là những gì tôi đã sử dụng

<Image Source="{Binding Converter={StaticResource ImageConverter},ConverterParameter=\{Status\}}" /> 

public class StatusToImageConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string statusValue = parameter.ToString().ToUpper(); 

     if (!string.IsNullOrEmpty(statusValue)) 
     { 
      string result = string.Empty; 

      switch (statusValue) 
      { 
       case "IDLE": 
        result = "idle.png"; 
        break; 
       case "OFFLINE": 
        result = "offline.png"; 
        break; 
       default: 
        result = "online.png"; 
        break; 
      } 

      var uri = new Uri("pack://application:,,,/PIE;component/Images/" + result); 

      return uri; 
     } 

     return string.Empty; 
    } 

    // No need to implement converting back on a one-way binding 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return DependencyProperty.UnsetValue; 
    } 
} 

Bounded Enum

public enum DevStatus 
{ 
    Idle = 1, 
    Offline = 2, 
    Active = 3, 
} 

Set Enum từ ViewModel và chuyển đổi sẽ ràng buộc các hình ảnh thích hợp.

<Image Source="{Binding DevStatus, Converter={StaticResource ImageConverter}}" /> 
+0

bạn có thể giải thích phần ConverterParameter = \ {Status \} không? – user3841581

+0

Trong trường hợp của tôi nó một giá trị enum enum công DeviceStatus { Nhàn rỗi = 1, offline = 2, kích hoạt = 3, } – dnxit

+0

dnxit

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