在WPF中,你能否将一个ListBox绑定到一个元组列表?

4
如果我有一个List<Tuple<DateTime,DateTime>>,我能在WPF中将其绑定到列表框吗?当然,我知道可以绑定到字典或其他东西,但在这种情况下,我需要发送回一个可能具有相同值的列表,因此使用元组列表似乎是合理的选择。你们有什么想法吗?

你尝试过绑定一个List<Tupple...吗?你可以构建一个自定义类,其中包含公共属性Date1和Date2。 - paparazzo
我在测试Tuple大约5分钟后就决定放弃这种可怕的做法。你可以在很短的时间内创建一个具有描述性属性的对象。使用Tuple,当你在2个月后回头看代码时,你会说:“WTF,那是什么对象?”所以还是创建一个对象吧。我的意见只值0.02元。 - Jake Berger
2个回答

5

是的,您可以将ListBox绑定到元组集合。但是,除非有不这样做的理由,否则我会使用自己类型的集合,因为Tuple类型公开的属性并不特别描述。


2
当然可以绑定它。我编写了以下代码:

确保你已经在后台添加了以下代码:

public partial class MainWindow : Window
{
    private readonly ObservableCollection<Tuple<DateTime, DateTime>> _dates = new ObservableCollection<Tuple<DateTime,DateTime>>();
    public ObservableCollection<Tuple<DateTime, DateTime>> Dates { get { return _dates; } }

    public MainWindow()
    {
        DataContext = this;
        InitializeComponent();
        PopulateList();
    }

    private void PopulateList()
    {
        _dates.Add(new Tuple<DateTime, DateTime>(DateTime.Now, DateTime.Now));
        _dates.Add(new Tuple<DateTime, DateTime>(DateTime.Now, DateTime.Now));
        _dates.Add(new Tuple<DateTime, DateTime>(DateTime.Now, DateTime.Now));
    }
}

还有XAML:

<Window x:Class="GuiScratch.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListBox ItemsSource="{Binding Dates}"/>

    </Grid>
</Window>

当我运行它时,我会看到一个由两个日期时间连接为列表成员的项目列表。
话虽如此,是否要这样做可能更多地取决于特定上下文。如果需要非常可插拔的绑定类型(即日期时间可能会变为字符串或整数),那么这可能是一个不错的选择。如果不需要,则最好绑定到更具表现力的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接