【问题标题】:Comboboxes, datacontexts and databinding组合框、数据上下文和数据绑定
【发布时间】:2011-09-19 13:24:22
【问题描述】:

在使用 itemssource、datacontexts 和 binding 时尝试显示某些内容时会感到困惑。

public class Date
{
    public DateTime _WeekDate;
    public ICollectionView _WeekData;
}

public class MainWindowViewModel
{
    public ICollectionView WeekDates { get; private set; }

    public MainWindowViewModel()
    {
        List<Date> _dates = new List<Date>();

        //Code to populate _dates

        WeekDates = CollectionViewSource.GetDefaultView(_dates);
    }
}

public MainWindow()
{
    InitializeComponent();

    _ViewModel = new MainWindowViewModel();
    gMain.DataContext = _ViewModel;
}

如您所见,我有一个名为 Date 的类的集合,其中包含一个 DateTime 和另一个集合。这一切都是在 ViewModel 中创建的,该 ViewModel 作为数据上下文附加到网格。

在这个网格中,我有一个组合框,它需要显示集合中每个 Date 类中列出的 DateTime 值。所以我有很多混乱:

<ComboBox ItemsSource="{Binding Path=PickupDates}" DisplayMemberPath="WeekDate" />

这已经奏效,但是我还希望将绑定转换器应用于 MemberPath 以更改显示日期的样式。但是以这种方式应用它我无法添加转换器。无济于事,我尝试了以下方法:

<ComboBox ItemsSource="{Binding Path=PickupDates}" DisplayMemberPath="{Binding Path=WeekDate", Converter={StaticResource DateFormatter}/>

有什么想法吗?或者有什么更好的方法?

提前致谢, SumGuy

【问题讨论】:

  • 代码似乎不连贯。 Date 类从未使用过。
  • 什么类型的 PickupDates 属性?它应该在 MainWindowViewModel 类中吗?
  • 很抱歉。希望编辑有所帮助。 WeekDates 是一个使用 Date 对象列表作为源的集合

标签: c# wpf data-binding combobox datacontext


【解决方案1】:

您无法绑定到 DisplayMemberPath,但您可以在绑定对象中提供一个属性,类似于您提供的工作示例中的 WeekDate,它以您希望的格式返回 WeekDate。设置 WeekDate 后,为新的格式化属性引发 propertychanged 事件。

【讨论】:

  • 好的,我明白你在说什么,是的,这将是一种更简单的方法(我总是喜欢让自己变得困难)。但只是为了确认您的另一点,您不能绑定到 DisplayMemberPath。这是正确的吗?为什么会这样?
  • 我认为使用的“路径”令人困惑。 DisplayMemberPath 只是要使用的属性的名称,而不是要使用的值。不知道为什么微软会朝这个方向发展,因为它很像 Windows 窗体。我看过一些帖子,人们已经找到了使用 DataTemplates 解决此问题的方法,但对于您的情况,似乎需要做很多额外的工作才能通过附加属性轻松解决。
【解决方案2】:

另一个答案的替代方法是将ItemStringFormat 设置为您要显示的日期时间格式。

<ComboBox ItemsSource="{Binding Path=PickupDates}" 
          ItemStringFormat="ddd dd-MM-yyyy" 
          DisplayMemberPath="WeekDate" /

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 2016-05-02
    • 2012-01-24
    • 2010-11-22
    • 1970-01-01
    • 2017-11-16
    • 2013-04-23
    相关资源
    最近更新 更多