Combobox, Datacontexts и привязки данных - PullRequest
1 голос
/ 19 сентября 2011

Просто запутываешься, когда пытаешься отобразить определенные вещи при использовании itemssource, datacontexts и привязки.

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, который присоединен к сетке в качестве контекста данных.

В этой сетке у меня есть выпадающий список, который должен отображать значение DateTime, указанное в каждом классе Date в коллекции. Так что со многими возни у меня есть это:

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

Это сработало, однако я также хочу, чтобы преобразователь привязки был применен к MemberPath для изменения стиля отображения даты. Но применяя его таким образом, я не могу добавить конвертер. Безрезультатно, я пробовал такие вещи, как:

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

Есть идеи? Или есть ли лучший способ сделать это?

Спасибо заранее, SumGuy

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

Альтернативой другому ответу является установка ItemStringFormat в формате DateTime, который вы хотите отобразить.

<ComboBox ItemsSource="{Binding Path=PickupDates}" 
          ItemStringFormat="ddd dd-MM-yyyy" 
          DisplayMemberPath="WeekDate" /
1 голос
/ 19 сентября 2011

Вы не можете привязать к DisplayMemberPath, но вы можете предоставить свойство в пределах вашего связанного объекта, подобное WeekDate в приведенном вами рабочем примере, которое возвращает WeekDate в желаемом формате.Если задано значение WeekDate, вызовите событие propertyloaded для нового свойства форматирования.

...