2012-04-18 18 views
6

Tôi đang sử dụng mã XAML phần trong số đó làSử dụng DataTrigger với nhiều hơn một giá trị trong WPF

<DataTrigger Binding="{Binding Path=Name}" Value="1"> 
    <Setter Property="Header" TargetName="expanderHeader" Value="Course Text"/> 
</DataTrigger> 
<DataTrigger Binding="{Binding Path=Name}" Value="2"> 
    <Setter Property="Header" TargetName="expanderHeader" Value="Media Lecture"/> 
</DataTrigger> 
<DataTrigger Binding="{Binding Path=Name}" Value="3"> 
    <Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/> 

<DataTrigger Binding="{Binding Path=Name}" Value="4"> 
    <Setter Property="Header" TargetName="expanderHeader" Value="Question"/> 
</DataTrigger> 
<DataTrigger Binding="{Binding Path=Name}" Value="5"> 
    <Setter Property="Header" TargetName="expanderHeader" Value="General"/> 
</DataTrigger> 

Bây giờ tôi muốn sử dụng một DataTrigger mà có thể có giá trị là 3, 301, 302 hoặc 303. Làm thế nào có thể Tôi làm việc này. Tôi đã thử với Multidatatrigger, nhưng nó không hoạt động. Mã Tôi đã thử với Multidatatrigger là:

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding Path=Name}" Value="301"/> 
     <Condition Binding="{Binding Path=Name}" Value="301"/> 
     <Condition Binding="{Binding Path=Name}" Value="302"/> 
     <Condition Binding="{Binding Path=Name}" Value="303"/> 
     </MultiDataTrigger.Conditions> 
    <Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/> 
</MultiDataTrigger> 
+0

Wat nào bạn muốn đạt được kích hoạt dữ liệu mở rộng? – Akanksha

+0

@ user1341006 Làm cách nào để thuộc tính của bạn 'Tên' có thể có 5 giá trị khác nhau cùng một lúc? – Ankesh

Trả lời

9

MultiDataTrigger áp dụng khi tất cả trong các điều kiện được đáp ứng không bất kỳ, đó là lý do tại sao MultiDataTrigger của bạn không hoạt động.

Hoặc có bốn trigger riêng biệt, hoặc đặt điều kiện thành một tài sản boolean riêng biệt như

bool ShowAssessment 
{ 
    return Value == 301 || Value == 302 ... 
} 

nâng cao một thông báo thay đổi sở hữu cho ShowAssessment khi giá trị thay đổi

ví dụ

int Value { 
    get{ return _value; } 
    set { 
     _value = value; 
     RaisePropertyChanged("Value"); 
     RaisePropertyChanged("ShowAssessment"); 
    } 
} 

và sau đó kích hoạt trên ShowAssessment.

Có lẽ giải pháp tốt hơn là thêm thuộc tính HeaderText với câu lệnh chuyển trả về văn bản tiêu đề chính xác dựa trên Value. Sau đó, chỉ cần ràng buộc văn bản của tiêu đề đó. Không cần kích hoạt.

+0

Tôi muốn trình kích hoạt áp dụng khi bất kỳ giá trị nào thỏa mãn. Tôi muốn trong một kích hoạt mà không cần sử dụng bốn bộ kích hoạt. – Jaguar

+0

Có một vài giải pháp trong câu trả lời của tôi. Một kích hoạt cho bốn giá trị của bạn hoặc không có trình kích hoạt nào bằng cách di chuyển logic vào mô hình chế độ xem. – Phil

0

MultidataTrigger sẽ hoạt động khi tất cả điều kiện được thỏa mãn. Vì vậy,

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding Path=Prop1}" Value="301"/> 
     <Condition Binding="{Binding Path=Prop2}" Value="301"/> 
     <Condition Binding="{Binding Path=Prop3}" Value="302"/> 
     <Condition Binding="{Binding Path=Prop4}" Value="303"/> 
    </MultiDataTrigger.Conditions> 
    <Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/> 
</MultiDataTrigger> 

Bạn sẽ đòi hỏi một DataTrigger đơn

<DataTrigger Binding="{Binding Path=ConditionEnum}" Value="1"> 
    <Setter Property="Header" TargetName="expanderHeader" Value="Course Text"/> 
</DataTrigger> 

Đặt Giá trị của Enum với một logic Defined trong mã của bạn ...

Ví dụ:

Validate() 
{ 
    if(Value == 301 || Value == 302|| ....) 
    { 
     ConditionEnum = MyEnum.Assessment; 
    } 
    //Other Conditions 
} 

Tôi rời khỏi việc triển khai INotifyPropertyChanged. Sử dụng nó để cung cấp thông báo thay đổi.

+0

Tôi muốn nó trong trường hợp giá trị là 3, 301, 302 hoặc 303. Làm thế nào tôi có thể làm điều này? – Jaguar

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