我正在尝试在工作中创建一个应用程序来显示分配给我们团队成员的工作,这是我第一次使用WPF。在此之前我做了一个简单的测试项目,以确保我理解WPF中的工作方式与WindowForms相比,并且我坚持让我的数据显示在我的列表视图中。在测试项目期间,我能够设置和显示数据,但是一旦我转移到实时项目并开始制作样式并真正隔离代码以提高可读性和可维护性,我的问题就出现了。以下是列表视图样式的XAML代码:
<Style x:Key="baseListViewstyle" TargetType="ListView">
<Setter Property="FontFamily" Value="Gautami"/>
<Setter Property="FontSize" Value="10"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListView">
<ListView>
<ListView.View>
<GridView>
<GridViewColumn Width="{StaticResource ResourceKey=columnWidth}" Header="PRF" DisplayMemberBinding="{Binding Path=[0]}"/>
<GridViewColumn Width="{StaticResource ResourceKey=columnWidth}" Header="Client ID" DisplayMemberBinding="{Binding Path=[1]}"/>
<GridViewColumn Width="{StaticResource ResourceKey=columnWidth}" Header="Drop Date" DisplayMemberBinding="{Binding Path=[2]}"/>
<GridViewColumn Width="{StaticResource ResourceKey=columnWidth}" Header="QTY" DisplayMemberBinding="{Binding Path=[3]}"/>
<GridViewColumn Width="{StaticResource ResourceKey=columnWidth}" Header="Type" DisplayMemberBinding="{Binding Path=[4]}"/>
</GridView>
</ListView.View>
</ListView>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我100%肯定问题来自这种风格,但我不确定如何解决它。我已经取出了样式,ListViews将显示从后面的代码中添加到它们中的所有项目,但是没有标题(显然),它只显示添加的项目的类型(在这种情况下是ListViews状态) String [] x次数)。我宁愿不将标题声明移动到窗口的XAML中,而是将它保存在我的style.xaml中,因为这些ListView将在整个代码中重复使用十几次,其中大部分将动态添加,所以指向统一的风格将使维护成倍增加。我觉得这是一个简单的风格问题,也许我需要一个不同的绑定或者标题是否应该以不同方式声明,因为它发生在一个样式中?这里参考的是我将数据添加到列表视图的代码。
private static void populateListView(ListView lv, List<Label> labels)
{
if (lv.Tag != null)
{
SqlConnectionStringBuilder conString = new SqlConnectionStringBuilder();
conString.IntegratedSecurity = true;
conString.DataSource = "oh50ms04\\Server_1";
using (SqlConnection con = new SqlConnection(conString.ToString()))
{
con.Open();
string sqlCMD = getSQLCommand(lv.Tag.ToString(), labels);
SqlCommand cmd = new SqlCommand(sqlCMD, con);
try
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
string[] arr = new string[] { reader["JobID"].ToString(), reader["ClientID"].ToString(), DateTime.Parse(reader["RDD"].ToString()).ToString("MM/dd/yy"), reader["QuantityFinishedPieces"].ToString(), reader["Type"].ToString() };
lv.Items.Add(arr);
}
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
}
}
答案 0 :(得分:1)
ControlTemplate定义了控件的(整个)外观,因此您可以有效地覆盖&#34;您使用样式中的空白字符集填充ListView的外观。
尝试将ListView的View属性设置为Style中的GridView,而不是覆盖模板:
<Style x:Key="baseListViewstyle" TargetType="ListView" x:Shared="False">
<Setter Property="FontFamily" Value="Gautami"/>
<Setter Property="FontSize" Value="10"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="View">
<Setter.Value>
<GridView>
<GridViewColumn Width="{StaticResource ResourceKey=columnWidth}" Header="PRF" DisplayMemberBinding="{Binding Path=[0]}"/>
<GridViewColumn Width="{StaticResource ResourceKey=columnWidth}" Header="Client ID" DisplayMemberBinding="{Binding Path=[1]}"/>
<GridViewColumn Width="{StaticResource ResourceKey=columnWidth}" Header="Drop Date" DisplayMemberBinding="{Binding Path=[2]}"/>
<GridViewColumn Width="{StaticResource ResourceKey=columnWidth}" Header="QTY" DisplayMemberBinding="{Binding Path=[3]}"/>
<GridViewColumn Width="{StaticResource ResourceKey=columnWidth}" Header="Type" DisplayMemberBinding="{Binding Path=[4]}"/>
</GridView>
</Setter.Value>
</Setter>
</Style>