балуюсь WPF, в учебных целях, наткнулся на грабли...
через Linq2Sql сделал модель таблички, пытаюсь её прибиндить к ComboBox как lookup список
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class EditModel
{
public MoneyFlow Item { get; set; }// тоже модель таблицы Linq2Sql в которой есть поле AccountFrom_GUID
public List<MoneyAccount> GetMoneyAccountFrom
{
get
{
DbCashContextDataContext ctx = new DbCashContextDataContext();
{
return ctx.MoneyAccounts.ToList();
}
}
}
}
1.
2.
3.
4.
5.
6.
7.
8.
<ComboBox Grid.Row="0" Grid.Column="1"
Name="cmbAccountFrom"
ItemsSource="{Binding Path=GetMoneyAccountFrom}"
DisplayMemberPath="Account_Name"
SelectedValuePath="Account_GUID"
SelectedValue="{Binding Path=Item.AccountFrom_GUID}"
/>
и это в принципе нормально работает, за исключением того, что ComboBox не выводит поля Account_Name, а имя класса (левая часть рисунка)
подумал, что я какой-то мелочи не знаю, решил сделать практически аналогичный тестовый пример который тоже должен был "не правильно" работать, и его выложить с вопросом в форум
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Model1 model = new Model1();
model.Str1 = "бла бла бла";
model.ListStr2 = new List<ItemClass>();
model.ListStr2.Add(new ItemClass() { Item_GUID = Guid.NewGuid(), Item_Str = "Строка1" });
model.ListStr2.Add(new ItemClass() { Item_GUID = Guid.NewGuid(), Item_Str = "Строка2" });
model.ListStr2.Add(new ItemClass() { Item_GUID = Guid.NewGuid(), Item_Str = "Строка3" });
model.ListStr2.Add(new ItemClass() { Item_GUID = Guid.NewGuid(), Item_Str = "Строка4" });
model.Selected_GUID = model.ListStr2.Last().Item_GUID;
this.DataContext = model;
}
}
public class A: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NPropertyChanged(string prop_Name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop_Name));
}
}
public class Model1:A
{
private string str1;
private Guid? selected_GUID;
public List<ItemClass> listStr2;
public string Str1 {
get
{
return str1;
}
set
{
str1 = value;
NPropertyChanged("Str1");
}
}
public Guid? Selected_GUID
{
get
{
return selected_GUID;
}
set
{
selected_GUID = value;
NPropertyChanged("Selected_GUID");
}
}
public List<ItemClass> ListStr2
{
get
{
return listStr2;
}
set
{
listStr2 = value;
NPropertyChanged("ListStr2");
}
}
}
public class ItemClass:A
{
protected Guid? item_GUID;
protected string item_Str;
public Guid? Item_GUID
{
get
{
return item_GUID;
}
set
{
item_GUID = value;
NPropertyChanged("Item_GUID");
}
}
public string Item_Str
{
get
{
return item_Str;
}
set
{
item_Str = value;
NPropertyChanged("Item_Str");
}
}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<ComboBox
HorizontalAlignment="Left"
Margin="54,86,0,0"
VerticalAlignment="Top"
Width="120"
ItemsSource="{Binding Path=ListStr2}"
DisplayMemberPath="Item_Str"
SelectedValuePath="Item_GUID"
SelectedValue="{Binding Path=Selected_GUID}"
/>
а он БАХ, и нормально работает! (правая часть рисунка)
посмотрел как Linq сделал поле Account_Name - все почти по феншую
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Account_Name", DbType="NVarChar(255)")]
public string Account_Name
{
get
{
return this._Account_Name;
}
set
{
if ((this._Account_Name != value))
{
this.OnAccount_NameChanging(value);
this.SendPropertyChanging();
this._Account_Name = value;
this.SendPropertyChanged("Account_Name");
this.OnAccount_NameChanged();
}
}
}
чегож тогда оно в списке комбобокса не выводится? что я делаю не так? (