wpf - DataTemplate.DataTrigger से अधिक या उससे कम की जांच करने के लिए कैसे प्राप्त करें?




xaml (2)

आप एक IValueConverter बना सकते हैं, जो CutOff आधार पर एक बुलियन को एक पूर्णांक परिवर्तित करता है। फिर DataTrigger.Value का उपयोग DataTrigger.ValueTrue का DataTrigger.Value (या False , जो आप लौट रहे हैं उसके आधार पर)।

यदि मुझे सही याद है तो WPF DataTrigger s कड़ाई से समानता DataTrigger हैं।

तो कुछ ऐसा ही है:

public class CutoffConverter : IValueConverter {
    object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        return ((int)value) > Cutoff;
    }

    object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        throw new NotImplementedException();
    }

    public int Cutoff { get; set; }
}

फिर निम्नलिखित एक्सएएमएल का उपयोग करें।

<Window.Resources>
    <myNamespace:CutoffConverter x:Key="AgeConverter" Cutoff="30" />
</Window.Resources>

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=Age,
                                   Converter={StaticResource AgeConverter}}">
        <DataTrigger.Value>true</DataTrigger.Value>
        <Setter TargetName="Age" Property="Foreground" Value="Red"/> 
    </DataTrigger>
</DataTemplate.Triggers>

निम्नलिखित DataTemplate.DataTrigger उम्र के प्रदर्शन को लाल बनाता है यदि यह 30 के बराबर है

यदि 30 से अधिक हो तो मैं उम्र का प्रदर्शन लाल कैसे कर सकता हूं?

<DataTemplate DataType="{x:Type local:Customer}">
    <Grid x:Name="MainGrid" Style="{StaticResource customerGridMainStyle}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="150"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Column="0" Grid.Row="0" Text="First Name" Margin="5"/>
        <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding FirstName}" Margin="5"/>
        <TextBlock Grid.Column="0" Grid.Row="1" Text="Last Name" Margin="5"/>
        <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding LastName}" Margin="5"/>
        <TextBlock Grid.Column="0" Grid.Row="2" Text="Age" Margin="5"/>
        <TextBlock x:Name="Age" Grid.Column="1" Grid.Row="2" Text="{Binding Age}" Margin="5"/>
    </Grid>

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=Age}">
            <DataTrigger.Value>30</DataTrigger.Value>
            <Setter TargetName="Age" Property="Foreground" Value="Red"/> 
        </DataTrigger>
    </DataTemplate.Triggers>

</DataTemplate>

मेरा मानना ​​है कि एमवीवीएम की शक्तियों का उपयोग करके लक्ष्य को स्वीकार करने का एक आसान तरीका है और INotifyPropertyChanged

Age संपत्ति के साथ एक और संपत्ति बनाते हैं जो IsAgeValid नामक एक बूलियन होगा। IsAgeValid बस मांग पर जांच होगी जो तकनीकी रूप से OnNotify कॉल की आवश्यकता नहीं है। कैसे?

Xaml में परिवर्तनों को धक्का देने के लिए, OnNotifyPropertyChanged को इसके बजाय Age सेटर के भीतर OnNotifyPropertyChanged लिए IsAgeValid

IsAgeValid लिए बाध्यकारी किसी भी Age परिवर्तन पर भेजा गया एक अधिसूचना संदेश होगा जो वास्तव में देखा जा रहा है।

एक बार सेटअप करने के बाद, निश्चित रूप से IsAgeValid परिणाम के अनुसार शैली को झूठी और सत्य के लिए बाध्य करें।

public bool IsAgeValid{ get { return Age > 30; } }

public int Age
{ 
  get { return _Age; }

  set
  {
   _Age=value;
   OnPropertyChanged("Age");   
   OnPropertyChanged("IsAgeValid"); // When age changes, so does the
                                    // question *is age valid* changes. So 
                                    // update the controls dependent on it.
   } 
 }




datatrigger