[英]Data not displaying in styled WPF ListView
我正在嘗試在工作中創建一個應用程序來顯示分配給我們團隊成員的工作,這是我第一次使用 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 中,因為這些 ListViews 將在整個代碼中重復使用十幾次,並且其中大部分將被動態添加,所以指向統一風格將使維護變得更加容易。 我覺得這是樣式中的一個簡單問題,也許我需要不同的綁定,或者標題應該以不同的方式聲明,因為它是在樣式中發生的? 作為參考,這里是我將數據添加到列表視圖背后的代碼。
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);
}
}
}
}
ControlTemplate 定義了控件的(整個)外觀,因此您可以有效地“覆蓋”正在填充的 ListView 的外觀,並使用 Style 中的空值。
嘗試將 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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.