2017-07-08 115 views
0

我有一個wpf列表視圖,其中3個組合框和2個複選框作爲列。我基於某些搜索條件玩複選框可見性。我可以實現行之間的水平線,但是我無法實現垂直線來分隔列。我從我的模型中更改了複選框&列寬的可見性。我需要遵循MVVM模式。 非常感謝。 在此先感謝。如何在MVVM模式下動態更改列寬列表視圖列行

下面是我的XAML代碼

<ListView Grid.ColumnSpan="3" Grid.Column="1" Grid.Row="2" 
          ItemsSource="{Binding NewTransactionSetlist,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
          SelectedItem="{Binding SelectedNewItem,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
          SelectedIndex="{Binding SelectedNewIndex, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
          VerticalAlignment="Top" Height="320" SelectionMode="Single" 
          HorizontalAlignment="Center" Width="1240"> 
        <ListView.ItemContainerStyle> 
         <Style TargetType="{x:Type ListViewItem}"> 
          <Setter Property="Padding" Value="0,2"/> 
          <Setter Property="BorderBrush" Value="LightGray"/> 
          <Setter Property="BorderThickness" Value="0,0,0,1"/> 
          <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
          <!--<EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem" ></EventSetter> 
          <Style.Triggers> 
            <Trigger Property="IsKeyboardFocusWithin" Value="true"> 
             <Setter Property="IsSelected" Value="true" /> 
            </Trigger> 
           </Style.Triggers>--> 
          <!--<Style.Triggers> 
           <DataTrigger Binding="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Value="True"> 
            <Setter Property="IsSelected" Value="True" /> 
           </DataTrigger> 
          </Style.Triggers>--> 

         </Style> 
        </ListView.ItemContainerStyle> 
        <!--<i:Interaction.Triggers> 
         <i:EventTrigger EventName="PreviewGotKeyboardFocus"> 
          <i:InvokeCommandAction Command="{Binding PreviewGotKeyboardFocusCommand}" 
                /> 
         </i:EventTrigger> 
        </i:Interaction.Triggers>--> 
        <!--<Style TargetType="{x:Type ListViewItem}"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Value="True"> 
           <Setter Property="IsSelected" Value="True" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style>--> 
        <ListView.InputBindings> 
         <KeyBinding 
         Key="Delete" 
         Command="{Binding NewTransactionDataGridRowDeleteCommand}"/> 
        </ListView.InputBindings> 
        <ListView.View> 
         <GridView ColumnHeaderContainerStyle="{StaticResource GridViewHeaderStyle}"> 
          <GridViewColumn Header="Transaction" Width="{Binding NewTransactionHeaderLength,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" > 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
              <ComboBox x:Name="ComboBoxParamList" HorizontalAlignment="Left" Width="{Binding TransactionHeaderLength,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
                IsEditable="False" Style="{DynamicResource DatagridComboboxFontstyle}" 
               Text="{Binding ParamGroup, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
               SelectedValue ="{Binding ParamGroup, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
               ItemsSource="{Binding ParamGroupList}" > 
              <i:Interaction.Triggers> 
               <i:EventTrigger EventName="SelectionChanged"> 
                <i:InvokeCommandAction Command="{Binding DataContext.ParameterNewSelectionChangedCommand, 
                RelativeSource={RelativeSource AncestorType=ListView}}"/> 
               </i:EventTrigger> 
              </i:Interaction.Triggers> 
             </ComboBox> 
            </DataTemplate> 
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
          <GridViewColumn Header="System" Width="{Binding NewSystemHeaderLength,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
              <ComboBox x:Name="ComboBoxSystemList" HorizontalAlignment="Left" Width="{Binding SystemHeaderLength,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
                IsEditable="False" Style="{DynamicResource DatagridComboboxFontstyle}" 
               Text="{Binding SystemName, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
               SelectedValue ="{Binding SystemName, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
               ItemsSource="{Binding SystemNameList}" /> 
            </DataTemplate> 
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
          <GridViewColumn Header="HandAdd" Width="{Binding NewHandAddHeaderLength,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" > 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
              <CheckBox Name="CheckBoxNewHandAdd" Width="{Binding HandAddHeaderLength,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
                Visibility="{Binding HandAddVisibility,Converter={StaticResource BoolToVisConverter}}" 
                IsChecked="{Binding HandAdd, Mode=TwoWay, NotifyOnSourceUpdated=True, 
             UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" Margin="90,0,0,0" ></CheckBox> 
            </DataTemplate>           
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
          <GridViewColumn Header="Downstream" Width="{Binding NewDownstreamHeaderLength,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
              <CheckBox Width="{Binding DownstreamHeaderLength,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
                Visibility="{Binding DownstreamVisibility,Converter={StaticResource BoolToVisConverter}}" 
                IsChecked="{Binding Downstream, Mode=TwoWay, NotifyOnSourceUpdated=True, 
             UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" Margin="90,0,0,0"></CheckBox> 
            </DataTemplate> 
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
          <GridViewColumn Header="Node" Width="{Binding NewNodeHeaderLength,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
              <ComboBox x:Name="ComboBoxNodeList" Width="{Binding NodeHeaderLength,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
                Text="{Binding Node, Mode=TwoWay, NotifyOnSourceUpdated=True, 
             UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" 
                SelectedValue ="{Binding Node, Mode=TwoWay, NotifyOnSourceUpdated=True, 
             UpdateSourceTrigger=PropertyChanged}" IsEditable="False" Style="{DynamicResource DatagridComboboxFontstyle}" 
               ItemsSource="{Binding NodeList}" /> 
            </DataTemplate> 
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
         </GridView> 
        </ListView.View> 
       </ListView> 
+0

所以你想顯示網格上的網格?嘗試https://msdn.microsoft.com/en-us/library/system.windows.controls.grid.showgridlines(v=vs.105).aspx在網格中設置ShowGridLines = true。 –

+0

我使用.net框架4.6,我沒有在我的程序集中找到它。我怎樣才能得到該DLL? –

+1

是的,試試這個博客http://blog.bulatgafurov.name/2010/06/listview-horizo​​ntal-and-vertical.html,你可以創建垂直水平網格線。 –

回答