码迷,mamicode.com
首页 > 其他好文 > 详细

【WPF】XmlDataProvider级联

时间:2014-07-02 22:36:41      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   width   for   io   

首先在绑定的时候进行转换:

  public class RegionConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            var name = value as string;
            var filter = parameter as string;
            if (string.IsNullOrEmpty(name) && filter != "country")
            {
                return null;
            }
            var provider = new XmlDataProvider();
            provider.Source = new Uri("Resources/Region.xml", UriKind.Relative);
            if (filter == "country")
            {
                provider.XPath = "/region/country/@name";
            }
            else if (filter == "province")
            {
                provider.XPath = string.Format("/region/country[@name=‘{0}‘]/province/@name", name);
            }
            else if (filter == "city")
            {
                provider.XPath = string.Format("/region/country/province[@name=‘{0}‘]/city/@name", name);
            }
            else if (filter == "town")
            {
                provider.XPath = string.Format("/region/country/province/city[@name=‘{0}‘]/town/@name", name);
            }
            return provider;
        }

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

再看以下如何绑定的

 <converters:RegionConverter x:Key="region"/>
  <ComboBox Grid.Column="0" x:Name="country" 
                                      DataContext="{Binding Converter={StaticResource region}, ConverterParameter=country}" 
                                      SelectedValue="{Binding DataContext.CurrEditorItem.Country,UpdateSourceTrigger=PropertyChanged,
                                      RelativeSource={RelativeSource AncestorType={x:Type mui:ModernWindow}}}"
                                      ItemsSource="{Binding}" 
                                      Width="85" Style="{StaticResource CommonComboBoxStyle}" />
                            <ComboBox Grid.Column="2" x:Name="province" 
                                      DataContext="{Binding SelectedValue, ElementName=country, Converter={StaticResource region}, ConverterParameter=province}" 
                                      SelectedValue="{Binding DataContext.CurrEditorItem.Province,UpdateSourceTrigger=PropertyChanged,RelativeSource={RelativeSource AncestorType={x:Type mui:ModernWindow}}}" 
                                      ItemsSource="{Binding}" 
                                      Width="85" Style="{StaticResource CommonComboBoxStyle}" />
                            <ComboBox Grid.Column="4" x:Name="city" 
                                      DataContext="{Binding SelectedValue, ElementName=province, Converter={StaticResource region}, ConverterParameter=city}" 
                                      SelectedValue="{Binding DataContext.CurrEditorItem.City,UpdateSourceTrigger=PropertyChanged,RelativeSource={RelativeSource AncestorType={x:Type mui:ModernWindow}}}" 
                                      ItemsSource="{Binding}"  
                                      Width="85" Style="{StaticResource CommonComboBoxStyle}" />
                            <ComboBox Grid.Column="6" x:Name="town" 
                                      DataContext="{Binding SelectedValue, ElementName=city, Converter={StaticResource region}, ConverterParameter=town}" 
                                      SelectedValue="{Binding DataContext.CurrEditorItem.Area,UpdateSourceTrigger=PropertyChanged,RelativeSource={RelativeSource AncestorType={x:Type mui:ModernWindow}}}" 
                                      ItemsSource="{Binding}" Text="{Binding Area,UpdateSourceTrigger=PropertyChanged}" 
                                      Width="85" Style="{StaticResource CommonComboBoxStyle}" />
                            <TextBlock Grid.Column="0" Text="国家" Tag="{Binding SelectedValue, ElementName=country}" 
                                       Style="{StaticResource TipTextBlock}"/>
                            <TextBlock Grid.Column="2" Text="省份" Tag="{Binding SelectedValue, ElementName=province}" 
                                       Style="{StaticResource TipTextBlock}"/>
                            <TextBlock Grid.Column="4" Text="市/区" Tag="{Binding SelectedValue, ElementName=city}" 
                                       Style="{StaticResource TipTextBlock}"/>
                            <TextBlock Grid.Column="6" Text="县/镇" Tag="{Binding SelectedValue, ElementName=town}" 
                                       Style="{StaticResource TipTextBlock}"/>

TextBlock放在ComboBox上面,Textblock样式如下

  <Style x:Key="TipTextBlock" TargetType="{x:Type TextBlock}">
            <Setter Property="IsHitTestVisible" Value="False" />
            <Setter Property="HorizontalAlignment" Value="Left"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="Margin" Value="12,0,0,0"/>
            <Setter Property="Opacity" Value="0"/>
            <Style.Triggers>
                <Trigger Property="Tag" Value="{x:Null}">
                    <Setter Property="Opacity" Value="1"/>
                </Trigger>
            </Style.Triggers>
        </Style>

 枚举在WPF的应用:

  <ComboBox x:Name="cbbDataType" ItemsSource="{Binding Source={StaticResource InfoDetailTypeItems}}"
                      SelectedItem="{Binding CurrEditorItem.DataType, ValidatesOnDataErrors=True}"
                      ItemTemplate="{StaticResource InfoDetailTypeDataTemplate}"
                      Grid.Row="2" Grid.Column="1"
                      Style="{StaticResource EditorComboBoxStyle}" />
  <x:Array x:Key="InfoDetailTypeItems" Type="{x:Type adservice:ShowDataType}">
        <adservice:ShowDataType>Image</adservice:ShowDataType>
        <adservice:ShowDataType>Video</adservice:ShowDataType>
        <adservice:ShowDataType>ThreeDModel</adservice:ShowDataType>
    </x:Array>

 

【WPF】XmlDataProvider级联,布布扣,bubuko.com

【WPF】XmlDataProvider级联

标签:style   blog   color   width   for   io   

原文地址:http://www.cnblogs.com/wywnet/p/3818951.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!