Reputation: 57
I have an enum
enum SendDays
{
Maandag = 1,
Dinsdag,
Vandaag= 99
}
And a Class
public struct DayListModel
{
public int Id;
public string DayName;
}
I fill a list with days like this
private void Filldays()
{
foreach(int i in Enum.getValues(typeof(SendDays)))
{
DayListModel day =new DaylistModel()
{
Id = i,
Dayname = Enum.GetName(typeof(SendDays), i)
};
DayList.Add(day);
}
When I use this is in A telerik RadGridView in a radcombobox like
<telerik:RadComboBox ItemsSource="{Bindning DayList}" DisplayMemberPath="DayName" SelectedValue="{Bindning DefaultSendDay}" SelectedValuePath="Id"/>
Whenever I change the selecteditem this is not passed.
Any suggestions?
Jeroen
Upvotes: 0
Views: 50
Reputation: 1328
Here is my advice, and how I got it to work:
Like @mm8 said, you should make the DayListModel
a class not a struct, and turn the fields into properties. If you don't use properties, the DisplayMemberPath
doesn't work. Some stuff doesn't work with structs (like using ==
to compare) so I would go with a class in this case.
Are your objects observable in your view model? I don't know telerik, but you should be calling some sort of PropertyChanged
method so the UI can update. If you use a framework like MVVM light it has ObservableObject
s and RaisePropertyChanged
methods.
Here is a working example:
MainWindowVM.cs
using GalaSoft.MvvmLight;
using System;
using System.Collections.Generic;
namespace WpfApp1
{
public class MainWindowVM : ObservableObject
{
private List<DayListModel> _DayList;
public List<DayListModel> DayList
{
get { return _DayList; }
set
{
if (value != _DayList)
{
_DayList = value;
RaisePropertyChanged();
}
}
}
private DayListModel _DefaultSendDay;
public DayListModel DefaultSendDay
{
get { return _DefaultSendDay; }
set
{
if (value != _DefaultSendDay)
{
_DefaultSendDay = value;
RaisePropertyChanged();
}
}
}
public MainWindowVM()
{
DayList = new List<DayListModel>();
foreach (int i in Enum.GetValues(typeof(SendDays)))
{
DayListModel day = new DayListModel()
{
Id = i,
DayName = Enum.GetName(typeof(SendDays), i)
};
DayList.Add(day);
}
DayList = new List<DayListModel>(DayList);
}
}
public enum SendDays
{
Maandag = 1,
Dinsdag,
Vandaag = 99
}
public class DayListModel
{
public int Id { get; set; }
public string DayName { get; set; }
}
}
MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<local:MainWindowVM />
</Window.DataContext>
<Grid >
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<ComboBox ItemsSource="{Binding DayList}" SelectedItem="{Binding DefaultSendDay}" DisplayMemberPath="DayName" >
</ComboBox>
<TextBlock Text="{Binding DefaultSendDay.DayName}"/>
</StackPanel>
</Grid>
</Window>
Screenshot:
Upvotes: 2
Reputation: 169340
Make sure that the types matches, i.e. if your DefaultSendDay
source property is a byte
, the Id
of the DayListModel
should also be a byte
.
If it still doesn't work, try to convert the fields into properties and the struct to a class:
public class DayListModel
{
public byte Id { get; set; }
public string DayName { get; set; }
}
Upvotes: 2