2011-08-06 24 views
9

Trong số nguyên nhân, chúng ta có thể kiểm tra tài sản chuỗi của một số kiểm soát mà đã có sản phẩm nào giống như đoạn mã sau:WPF: Điều kiện kích hoạt khi Không có sản phẩm nào chuỗi

<Trigger SourceName="atCaption" Property="Text" Value="{x:Static sys:String.Empty}"> 
    <Setter TargetName="imgBack" Property="Margin" Value="0"/> 
    <Setter TargetName="atCaption" Property="Margin" Value="0"/> 
</Trigger> 

và sau đó, làm thế nào có thể xác định một điều kiện mà 'không có sản phẩm nào' chuỗi ?

<!--unfortunately, can't accept '!=' operator in xaml.--> 
<Trigger SourceName="atCaption" Property="Text" Value!="{x:Static sys:String.Empty}"> 
    <Setter TargetName="imgBack" Property="Margin" Value="0"/> 
    <Setter TargetName="atCaption" Property="Margin" Value="0"/> 
</Trigger> 

giúp tôi.

+0

câu hỏi tương tự ở đây: http://stackoverflow.com/questions/356194/wpf- datatrigger-where-value-is-not-null – LPL

Trả lời

5

Sử dụng ValueConverter là một giải pháp.

Khi sử dụng MVVM, bạn có thể xem xét thuộc tính bổ sung trên lớp ViewModel mà bạn đang ràng buộc để xác định cách hiển thị điều khiển.

Khi tôi sử dụng MVVM chiều giải quyết này tôi không cần kích hoạt, tôi chỉ cần thêm thuộc tính bổ sung cho các ViewModel và ràng buộc thuộc tính của Xem những thuộc tính phụ để thao tác Xem

+3

Điều duy nhất tôi sẽ thêm vào đó là với MVVM, ý tưởng là mô hình khung nhìn không nên biết nó được hiển thị như thế nào. Thay vào đó, chế độ xem sẽ lấy mô hình khung nhìn và hiển thị nó, tuy nhiên nó có vẻ phù hợp. ví dụ. có một thuộc tính màu sắc trên máy ảo của bạn để cho biết màu sắc để hiển thị điều này là không tốt từ một điểm MVVM tinh khiết của xem. (Rõ ràng là trong thế giới thực, các mô hình lập trình 'thuần túy' có xu hướng phá vỡ một chút, chỉ nghĩ rằng tôi muốn chỉ ra nó)) – Steve

+1

@ user1080084 - Có nhưng tôi phải nói rằng tôi không thích ValueConverters quá: đó là mã trong xem và phải được áp dụng bởi nhà thiết kế. Những chuyển đổi 'treo' này giữa View và ViewModel. –

0

Nếu bạn sử dụng trình kích hoạt dữ liệu, nó sử dụng cú pháp ràng buộc để bạn có thể sử dụng lớp IValueConverter để chuyển đổi thành thuộc tính thành giá trị boolean. Bạn có thể viết kiểm tra mà bạn muốn thực hiện trong mã bên trong một IValueConverter tùy chỉnh.

4

Để nhanh chóng có được do đó, các giá trị áp dụng cho điều kiện đảo ngược phải được mặc định trong khai báo phần tử hoặc Kiểu và sau đó sử dụng điều kiện bình đẳng thẳng để thay đổi các giá trị.

ví dụ:

Giả sử lề 5 là những gì bạn đặt cho chuỗi rỗng và 0 là những gì bạn phải đặt cho chuỗi không trống thì bạn sẽ đặt 0 theo mặc định là Setter đơn giản trong Style và sau đó kiểm tra chuỗi trống bằng Trình kích hoạt và đặt 5. Đảm bảo rằng Setter mặc định (cho 0) xuất hiện trước Trigger (cho 5) trong Style.

4

để tăng cường cho câu trả lời bằng WPF-nó (với tôi đây là một giải pháp lâu dài, không phải là một sửa chữa nhanh chóng)

<DataTrigger Binding="{Binding VolumeGroup}" Value="{x:Null}"> 
     <Setter Property="Background" Value="{StaticResource DataGridBackground}" /> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding VolumeGroup}" Value=""> 
     <Setter Property="Background" Value="{StaticResource DataGridBackground}" /> 
    </DataTrigger> 
</Style.Triggers> 
<!--inverted rare case: VolumeGroup will usually be empty so cells will be {StaticResource DataGridBackground}--> 
<Setter Property="Background" Value="DarkOliveGreen" /> 
Các vấn đề liên quan