WPF DataTemplate 数据模板例子及注意使用

DataTemplate 就是数据模板,用来指定数据的表现形式。

如下:

主控件:

ScrollViewer.HorizontalScrollBarVisibility="Disabled"   item可实现自动换行

        <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" Margin="10,0,10,10" Grid.Row="1" ItemTemplate="{DynamicResource ItemDataTemplate}" ItemsSource="{Binding ProInfolist}">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>

数据模板如下: 

其中数据模板中的按钮事件,需要绑定为如下格式(查找父控件方式相对),才能进行触发:

 Command="{Binding DataContext.ModifiyCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}, Mode=FindAncestor}}"
                        CommandParameter="{Binding SelectedItem,RelativeSource={RelativeSource AncestorType={x:Type ListBox}, Mode=FindAncestor}}"

 <DataTemplate x:Key="ItemDataTemplate">
            <Grid Background="LightGray" x:Name="grds" Width="110">
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Viewbox>
                    <Grid Margin="10" x:Name="grd">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <TextBlock Grid.Row="0" Grid.Column="0" Text="ID" />
                        <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding ID}"/>
                        <TextBlock Grid.Row="1" Text="名称" />
                        <TextBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding Name}"/>
                        <TextBlock Grid.Row="2" Text="程序号" />
                        <TextBox Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding ProgramNo}"/>
                        <TextBlock Grid.Row="3" Text="快充/慢充"/>
                        <TextBox Grid.Row="3" Grid.Column="1"  Text="{Binding IsFastCharge}"/>
                        <TextBlock  Grid.Row="4" Text="慢充压力" />
                        <TextBox Grid.Row="4" Grid.Column="1" Text="{Binding PressureValveSmall}"/>
                        <TextBlock Grid.Row="5" Text="快充压力" />
                        <TextBox Grid.Row="5" Grid.Column="1" Text="{Binding PressureValveLarge}"/>
                        <TextBlock Grid.Row="6" Text="充气时间" />
                        <TextBox Grid.Row="6" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding AerationTime}"/>
                        <TextBlock Grid.Row="7" Text="所属功能" />
                        <TextBox Grid.Row="7" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding Type}"/>
                        <TextBlock Grid.Row="8" Text="流量范围" />
                        <TextBox Grid.Row="8" Grid.Column="1" Text="{Binding RangeFlowMin}"/>
                        <TextBox Grid.Row="8" Grid.Column="2" Text="{Binding RangeFlowMax}"/>
                        <TextBlock Grid.Row="9" Text="压力范围" />
                        <TextBox Grid.Row="9" Grid.Column="1" Text="{Binding RangePressMin}"/>
                        <TextBox Grid.Row="9" Grid.Column="2" Text="{Binding RangePressMax}"/>
                        <TextBlock Grid.Row="10" Text="时间" />
                        <TextBlock Grid.Row="10" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding SaveTime, Mode=TwoWay, StringFormat=yyyy/MM/dd HH:mm:ss}"/>
                    </Grid>
                </Viewbox>
                <Button x:Name="btnModifiy" 
                        Visibility="Collapsed" Grid.Row="1" FontSize="10" 
                        Tag="{Binding ElementName=grds}" 
                        Content="修改" 
                        Command="{Binding DataContext.ModifiyCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}, Mode=FindAncestor}}"
                        CommandParameter="{Binding SelectedItem,RelativeSource={RelativeSource AncestorType={x:Type ListBox}, Mode=FindAncestor}}"/>
                <Popup x:Name="popup">
                </Popup>
            </Grid>
            <DataTemplate.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True"/>
                        <Condition Binding="{Binding IsMouseOver,ElementName=grds}"  Value="true"/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Width" TargetName="grds" Value="300"/>
                    <Setter Property="Visibility" TargetName="btnModifiy" Value="Visible"/>
                </MultiDataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值