我正在制作一个具有数据绑定ListView的WPF应用程序。加载应用程序时,ListViewColumns的宽度将自动调整大小,但在添加或更改项目时,它不会自动调整大小。我已经尝试刷新listview,在xaml和VB代码中将列的宽度设置为auto,-1或-2,我尝试在将itemssource重新填充项目之前将其更改为空。这是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"/>
绑定适用于控制器,该控制器从SQL数据库获取具有Person.getPersons的人员:
Private oController As New MainController()
Public Sub New()
MyBase.New()
Me.InitializeComponent()
Me.DataContext = oController
End Sub
按下按钮后,将打开一个窗口以添加一个人。窗口关闭后,该项目将添加到列表视图中,并带有以下代码,用于刷新列表视图中的项目:
lsvPersons.ItemsSource = Person.getPersons()
那么,在添加或编辑项目时,我需要做些什么来自动调整listview的列?
答案 0 :(得分:0)
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;
// }
}
}