Silverlight類比WPF的TemplateSelector,以實現動態顯示不同column

來源:互聯網
上載者:User

代碼下載:

Service:WcfService7.zip

Silverlight:DynamicGridViewDemo.zip

思路簡單介紹如下:

1.AttachedBehavior結合Resource來為Column中的列添加事件

2.使用DP,來封裝多個GridView:

public class FormFieldTemplateSelector : UserControl{    public DataTemplate FirstTemplate { get; set; }    public DataTemplate SecondTemplate { get; set; }    public static readonly DependencyProperty FieldTypeProperty =        DependencyProperty.Register("FieldType", typeof(string),        typeof(FormFieldTemplateSelector), new PropertyMetadata(string.Empty));    public string FieldType    {        get { return (string)GetValue(FieldTypeProperty); }        set { SetValue(FieldTypeProperty, value); }    }    public FormFieldTemplateSelector()    {        Loaded += new RoutedEventHandler(OnLoaded);    }    private void OnLoaded(object sender, RoutedEventArgs e)    {        string fieldType = FieldType;        if (fieldType == "1")        {            Content = FirstTemplate.LoadContent() as UIElement;        }        else if (fieldType == "2")        {            Content = SecondTemplate.LoadContent() as UIElement;        }        else        {            Content = null;        }    }}

 

相應的XAML:

<local:FormFieldTemplateSelector Grid.Column="1" FieldType="{Binding CarriedNO}" Margin="0,2,0,2">    <local:FormFieldTemplateSelector.FirstTemplate>        <DataTemplate>            <data:DataGrid ItemsSource="{Binding FlightList, Mode=OneWay}" SelectedItem="{Binding SelectedFlightInfo, Mode=TwoWay}"               Margin="24,29,54,33"               HorizontalAlignment="Stretch"  VerticalAlignment="Stretch"               AutoGenerateColumns="False" IsReadOnly="True"               >                <data:DataGrid.Columns>                    <data:DataGridTemplateColumn Header="FlightNO" Width="60" SortMemberPath="FlightNO" >                        <data:DataGridTemplateColumn.CellTemplate>                            <DataTemplate>                                <TextBlock Tag="FlightNO" Text="{Binding FlightNO}"  />                            </DataTemplate>                        </data:DataGridTemplateColumn.CellTemplate>                    </data:DataGridTemplateColumn>                    <data:DataGridTextColumn Header="Date" Width="58"  Binding="{Binding Date}" />                    <data:DataGridTemplateColumn Header="ORIG" Width="58" SortMemberPath="ORIG">                        <data:DataGridTemplateColumn.CellTemplate>                            <DataTemplate>                                <TextBlock Tag="ORIG" Text="{Binding ORIG}"                                           local:MouseLeftButtonUp.Command="{Binding Path=Value, Source={StaticResource MouseLeftButtonUpCommand}}"                                           />                            </DataTemplate>                        </data:DataGridTemplateColumn.CellTemplate>                    </data:DataGridTemplateColumn>                </data:DataGrid.Columns>            </data:DataGrid>        </DataTemplate>    </local:FormFieldTemplateSelector.FirstTemplate>    <local:FormFieldTemplateSelector.SecondTemplate>        <DataTemplate>            <data:DataGrid ItemsSource="{Binding FlightList, Mode=OneWay}" SelectedItem="{Binding SelectedFlightInfo, Mode=TwoWay}"               Margin="24,29,54,33"               HorizontalAlignment="Stretch"  VerticalAlignment="Stretch"               AutoGenerateColumns="False" IsReadOnly="True"               >                <data:DataGrid.Columns>                    <data:DataGridTemplateColumn Header="FlightNO" Width="60" SortMemberPath="FlightNO" >                        <data:DataGridTemplateColumn.CellTemplate>                            <DataTemplate>                                <TextBlock Tag="FlightNO" Text="{Binding FlightNO}"  />                            </DataTemplate>                        </data:DataGridTemplateColumn.CellTemplate>                    </data:DataGridTemplateColumn>                    <data:DataGridTextColumn Header="Date" Width="58"  Binding="{Binding Date}" />                    <data:DataGridTemplateColumn Header="DEST" Width="58" SortMemberPath="DEST">                        <data:DataGridTemplateColumn.CellTemplate>                            <DataTemplate>                                <TextBlock Tag="DEST" Text="{Binding DEST}"                                            local:MouseLeftButtonUp.Command="{Binding Path=Value, Source={StaticResource MouseLeftButtonUpCommand}}"                                                                                              />                            </DataTemplate>                        </data:DataGridTemplateColumn.CellTemplate>                    </data:DataGridTemplateColumn>                </data:DataGrid.Columns>            </data:DataGrid>        </DataTemplate>    </local:FormFieldTemplateSelector.SecondTemplate></local:FormFieldTemplateSelector>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.