我正在尝试将obeservablecollection内容从名为LumelauaPikkused的属性绑定到xaml组合框。我正在设置datacontext,但是对于某些共鸣,如果我向LumelauaPikkused添加项目,它会显示任何内容
<ComboBox x:Name="VLumelaud"
HorizontalAlignment="Left"
VerticalAlignment="Top" Width="120"
Canvas.Left="10"
Canvas.Top="200"
Cursor="Hand"
ItemsSource="{Binding Lumelauapikkused}"
>
<ComboBox.DataContext>
<modelsView:LumelauaPikkused/>
</ComboBox.DataContext>
</ComboBox>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Laenutus.ModelsView
{
public class LumelauaPikkused
{
public ObservableCollection<string> _lumelauaPikkused;
public LumelauaPikkused()
{
this._lumelauaPikkused = new ObservableCollection<string>();
}
public ObservableCollection<string> Lumelauapikkused
{
get { return _lumelauaPikkused; }
set { _lumelauaPikkused = value; }
}
}
}
private void LisaVarustusClick(object sender, RoutedEventArgs e)
{
#region LisaLumeLaud
#endregion
#region CheckIfTextBoxHasValue
///// ADDING LOGIC ////////////
if (!String.IsNullOrEmpty(_LisaMaesuusk.Text))
{
String lisaLumel = _LisaLumelaud.Text;
lpp.Lumelauapikkused.Add(lisaLumel);
LumelauaPikkused.Add(lisaLumel);
Console.WriteLine(" mitu lumelauda " + lpp.Lumelauapikkused.Count);
_LisaMaesuusk.Clear();
this.DataContext = MSP;
}
else if (!String.IsNullOrEmpty(_LisaLumelaud.Text))
{
String lisaSuusk = _LisaMaesuusk.Text;
MSP.Maesuusapikkused.Add(lisaSuusk);
MaeSuusapikkused.Add(lisaSuusk);
Console.WriteLine(" mitu maesuuska " + MSP.Maesuusapikkused.Count);
_LisaLumelaud.Clear();
// this.DataContext = lpp;
}
else if (!String.IsNullOrEmpty(_LisaLumelaud.Text) || !string.IsNullOrEmpty(_LisaMaesuusk.Text))
{
MessageBox.Show("Objekt on lisatud!");
}
else
{
MessageBox.Show("Sisestage vähemalt üks väärtus");
}
#endregion
// Console.WriteLine("Lumelaudu on: " + LumelauaPikkused.ToString());
}
//在这里我创造了这些课程的对象
public partial class MainWindow : Window
{
private LumelauaPikkused lpp;
private Maesuuusapikkused MSP; //MSP = MaeSuusaPikkused
public static List<string> LumelauaPikkused = new List<string>();
public static List<string> MaeSuusapikkused = new List<string>();
public MainWindow()
{
InitializeComponent();
lpp = new LumelauaPikkused();
MSP = new Maesuuusapikkused();
}
答案 0 :(得分:0)
请检查代码中的姓名。
实际上,您正在插入名为LumelauaPikkused
的对象作为ComboBox DataContext,但您的类名为Maesuuusapikkused
。
此外,您将ComboBox属性ItemsSource
绑定到名为Lumelauapikkused的DataContext的属性,但您的类只有一个名为Maesuusapikkused
的属性
修改强>
我尝试将一些项添加到ObservableCollection中,但我没有发现任何问题。 我用了这段代码:
public class LumelauaPikkused
{
private ObservableCollection<string> _lumelauaPikkused;
private System.Windows.Threading.DispatcherTimer _dispatcherTimer;
public LumelauaPikkused()
{
this._lumelauaPikkused = new ObservableCollection<string>();
this._lumelauaPikkused.Add("One");
this._lumelauaPikkused.Add("Two");
this._lumelauaPikkused.Add("Three");
_dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
_dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
_dispatcherTimer.Interval = new TimeSpan(0, 0, 20);
_dispatcherTimer.Start();
}
void dispatcherTimer_Tick(object sender, EventArgs e)
{
this._lumelauaPikkused.Add("Four");
this._lumelauaPikkused.Add("Five");
this._lumelauaPikkused.Add("Six");
_dispatcherTimer.Stop();
}
public ObservableCollection<string> Lumelauapikkused
{
get { return _lumelauaPikkused; }
set { _lumelauaPikkused = value; }
}
}
我添加了一个DispatcherTimer
只是为了在一段时间后添加一些元素(可能在您的代码中,您正在使用Command来添加它们)。正如您在20秒后看到的那样,ComboBox有6个项目而不是3个。
第二次编辑
为了解决您的问题,首先您必须决定要使用哪种设计架构。在您的代码中,您使用了MVVM pattern和代码隐藏模式的混合。 第一个(我更喜欢的那个)稍微复杂一点,但是让你以更简单的方式测试代码(因为它将UI与业务逻辑类分离)。 如果您想使用此技术,您应该了解command pattern。
另一方面,如果您对MVVM没有信心,可以在MainWindow类中使用代码隐藏:
public partial class MainWindow : Window
{
private LumelauaPikkused lpp;
private Maesuuusapikkused MSP; //MSP = MaeSuusaPikkused
public static List<string> LumelauaPikkused = new List<string>();
public static List<string> MaeSuusapikkused = new List<string>();
public MainWindow()
{
InitializeComponent();
lpp = new LumelauaPikkused();
MSP = new Maesuuusapikkused();
VLumelaud.ItemsSource = lpp.Lumelauapikkused;
}
// the rest of your code...
}
同时您必须从XAML <modelsView:LumelauaPikkused/>
和ComboBox ItemsSource绑定中删除。
无论如何,最重要的是你不能混合MVVM和“codebehind”。 我希望它有所帮助。