Изменение размера базы данных ListViewColumns при добавлении элемента - PullRequest
1 голос
/ 04 декабря 2011

Я делаю WPF-приложение, которое имеет ListView с привязкой к данным. При загрузке приложения ширина ListViewColumns будет автоматически изменять размер, но при добавлении или изменении элемента он не будет автоматически изменять размер. Я попытался обновить представление списка, установив для ширины столбца значение auto, -1 или -2 в xaml и VB-коде, и я пытался изменить источник данных на ничто, прежде чем заполнять его элементами. Это код xaml:

<ListView x:Name="lsvPersons" Margin="5,5,5,35" ItemsSource="{Binding Persons}">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name"/>
            <GridViewColumn DisplayMemberBinding="{Binding Gender}" Header="Gender"/>
            <GridViewColumn DisplayMemberBinding="{Binding Age}" Header="Age"/>
        </GridView>
    </ListView.View>
</ListView>
<Button x:Name="btnAddPerson" Content="Add" Height="25" Margin="0,0,200,5" Width="80"/>

Привязка работает с контроллером, который получает людей с Person.getPersons из базы данных SQL:

Private oController As New MainController()
Public Sub New()
    MyBase.New()
    Me.InitializeComponent()
    Me.DataContext = oController
End Sub

После нажатия кнопки откроется окно для добавления человека. После закрытия окна элемент добавляется в представление списка с помощью следующего кода, который обновляет элементы в представлении списка:

lsvPersons.ItemsSource = Person.getPersons()

Итак, что мне нужно сделать, чтобы автоматически изменить размер столбцов списка при добавлении или редактировании элемента?

1 Ответ

0 голосов
/ 05 декабря 2011
        GridView gv = lvSrchResulsGrid.View as GridView;
        if (gv != null)
        {
            int colNum = 0;
            foreach (GridViewColumn c in gv.Columns)
            {
                // Code below was found in GridViewColumnHeader.OnGripperDoubleClicked() event handler (using Reflector)
                // i.e. it is the same code that is executed when the gripper is double clicked
                // if (adjustAllColumns || App.StaticGabeLib.FieldDefsGrid[colNum].DispGrid)
                // if (adjustAllColumns || fdGridSorted[colNum].AppliedDispGrid)
                // {
                    if (double.IsNaN(c.Width))
                    {
                        c.Width = c.ActualWidth;
                    }
                    c.Width = double.NaN;
                // }
            }
        }
...