2013年06月20日

WPFサンプル:マルチデータトリガーを使う

   このエントリーをはてなブックマークに追加 Clip to Evernote
データトリガーには、MultiDataTriggerというものも用意されています。
このトリガーは、バインドされたデータが一連の条件を満たしたときに、プロパティ値を適用するかアクションを実行します。

MultiDataTriggerの例を以下に示します。
WPFサンプル:データトリガーを使う」のXAMLの Style.Triggers要素に、以下の行を追加しています。

   <MultiDataTrigger>
       <MultiDataTrigger.Conditions>
           <Condition Binding="{Binding Path=Name}" Value="横浜" />
           <Condition Binding="{Binding Path=Prefecture}" Value="神奈川" />
       </MultiDataTrigger.Conditions>
       <Setter Property="Background" Value="Bisque" />
   </MultiDataTrigger>

この例では、2つの条件が一致したときに、Background プロパティの値が指定した値に変更されます。
以下、実行結果です。

DataTrigger2

XAML全体とC#のコードも掲載しておきます。

<Window x:Class="MultiDataTriggerSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:MultiDataTriggerSample"
        Title="MainWindow" Height="150" Width="300">
    <Window.Resources>
        <my:Places x:Key="PlacesData"/>
        <Style TargetType="ListBoxItem">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Prefecture}" Value="栃木">
                    <Setter Property="Foreground" Value="Blue" />
                </DataTrigger>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Path=Name}" Value="横浜" />
                        <Condition Binding="{Binding Path=Prefecture}" Value="神奈川" />
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Background" Value="Bisque" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
        <DataTemplate DataType="{x:Type my:Place}">
            <StackPanel Width="160" Orientation="Horizontal">
                <TextBlock  Width="100"
                           Text="{Binding Path=Name}" Margin="5,0,0,0"/>
                <TextBlock  Width="50"
                           Text="{Binding Path=Prefecture}"/>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>
    <StackPanel>
        <ListBox Width="180" HorizontalAlignment="Center" Background="Snow"
                 ItemsSource="{Binding Source={StaticResource PlacesData}}"/>
    </StackPanel>
</Window>

using System.Collections.ObjectModel;
using System.Windows;
namespace MultiDataTriggerSample {
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
        }
    }
        public class Places : ObservableCollection<Place> {
            public Places() {
                Add(new Place { Name = "宇都宮", Prefecture = "栃木" });
                Add(new Place { Name = "川口", Prefecture = "埼玉" });
                Add(new Place { Name = "春日部", Prefecture = "埼玉" });
                Add(new Place { Name = "日光", Prefecture = "栃木" });
                Add(new Place { Name = "横浜", Prefecture = "神奈川" });
                Add(new Place { Name = "仙台", Prefecture = "宮城" });
            }
    }
    public class Place {
        public string Name { get; set; }
        public string Prefecture { get; set; }
    }
}


WPFサンプル・目次


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52325195