我试图让它工作几天。 这段代码有什么问题?
这是我的窗口XAML:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Rapideo_Client"
x:Class="Rapideo_Client.MainWindow"
Title="NVM" SnapsToDevicePixels="True" Height="400" Width="625">
<Window.Resources>
<DataTemplate x:Key="linksTemplate" DataType="DownloadLink">
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Path=Name}" FontWeight="Bold"></TextBlock>
<Label Content="{Binding Path=SizeInMB}"/>
<Label Content="{Binding Path=Url}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Visible"
x:Name="MainListBox"
ItemTemplate="{DynamicResource linksTemplate}">
</ListView>
</Window>
这是我的班级:
class Rapideo
{
(...)
public List<DownloadLink> Links { get; private set; }
(...)
}
这是我的项目:
class DownloadLink
{
public string Name { get; private set; }
public string Url { get; private set; }
public DateTime ExpiryDate { get; private set; }
public float SizeInMB { get; private set; }
public int Path { get; private set; }
public string Value { get; private set; }
public LinkState State { get; set; }
public enum LinkState
{
Ready, Downloading, Prepering, Downloaded
}
public DownloadLink(string name, string url, DateTime expiryDate, float sizeInMB, int path, string value, LinkState state)
{
Name = name;
Url = url;
ExpiryDate = expiryDate;
SizeInMB = sizeInMB;
Path = path;
Value = value;
State = state;
}
}
这是我的约束力:
RapideoAccount = new Rapideo();
MainListBox.ItemsSource = RapideoAccount.Links;
稍后在代码中我在RapideoAccount.Links中填充该列表。 但是ListView中没有显示任何内容。 列表视图始终为空。
该代码中的错误在哪里?
答案 0 :(得分:2)
是的,如果您计划在设置ObservableCollection<DownloadLink>
之后添加它,那么它应该是ItemsSource
。如果列表已预加载且您不会更改它,则List<T>
将起作用。
现在我认为
MainListBox.ItemsSource = RapideoAccount.Links;
在技术上仍然是一种约束力。但你可能想到的是通过DataContext而不是直接绑定(也就是MVVM风格)。所以那就是:
RapideoAccount = new Rapideo();
this.DataContext = RapideoAccount;
然后在你的窗口中,你将像这样绑定你的ItemSource:
<Window
...
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Visible"
x:Name="MainListBox"
ItemsSource="{Binding Links}"
ItemTemplate="{DynamicResource linksTemplate}">
</ListView>
</Window>
祝你好运。
迈克尔
答案 1 :(得分:1)
我认为链接需要是ObservableCollection
,而不是列表。
答案 2 :(得分:1)
首先,如果您计划在设置绑定后对列表进行更改,则应使用ObservableCollection<DownloadLink>
而不是List<DownloadLink>
。
其次,要明确:
MainListBox.ItemsSource = RapideoAccount.Links;
不是绑定。你只是设置了财产。这适用于某些场景,但它并不像我们通常在WPF中谈论的那样具有约束力。