Tag: 数据绑定

WPF数据绑定的新手

我是WPF Data绑定的新手,有点卡住了。 显然我的文本框没有正确绑定到我想要的数据元素,我无法弄清楚原因。 首先在我的MainWindow.xaml文件中,我声明了一个对象: 这会在MainWindow.InitializeComponent()期间创建一个Aircraft类型的对象 (我可以通过在飞机的构造函数上放置一个断点来validation这一点) Class Aircraft在.cs文件中定义,属性Pilot具有属性Weight ,因此myAircraft.Pilot.Weight是一个int 。 接下来,我尝试将文本框绑定到此属性: 应用程序编译并运行,但是当我将数字文本放入文本框中,然后将焦点移动到另一个文本框时,我希望看到Pilot.Weight的setter被调用(我有一个断点)。 它没有。 我相信从String(从文本框)到int(Weight属性的类型)应该有一个默认的ValueConverter,并且该文本框应该具有LostFocus默认update-source事件。 我正确指定了绑定吗? 我是否需要创建ValueConverter,或明确指定更新事件? 还有什么我做错了吗?

如何在WinForms GUI控件和客户端类之间同步数据?

什么方法被认为是保持GUI控件中的数据结构与应用程序维护的数据结构同步的“标准”? 例如:在WinForms中,如果创建一个ListView实例,而不是将其指向表示列表中显示的项的数据结构,则必须以编程方式实例化ListViewItem并调用.Add方法来手动复制它们,一个接一个地进入ListView本身内部的数据结构。 从线程的角度来看,这是有道理的,并且在呈现的上下文中也有意义,控件应该需要存在专用数据结构,控件单独知道有关维护的细节。 但是,这会产生两个问题: 冗余:如果客户端类管理自己的实体列表,允许用户从WinForms UI中选择它们,则必须通过以下方法读取,转换然后在UI控件内重新创建整个列表:.Add( ListViewItem项目)列表现在占用两倍的内存。 复杂性:由于现在存在两个列表,因此必须以编程方式确保它们保持同步。 这可以通过从客户端类的集合对象触发的事件来实现,或者程序员可以在添加/删除另一个列表时始终在一个列表中添加/删除。 我见过许多实例,程序员将使用像ListView这样的UI元素作为用于维护列表的实际集合对象的快捷方式。 例如,每个用户输入的项目将立即插入ListView,然后当访问用户的entires时,应用程序只是遍历ListView。 当您从UI逻辑中正确分离业务/应用程序逻辑时,此方法无法应用。 总的来说,将应用程序数据存储在GUI控件内部的数据结构中似乎并不正确。 同样,存储两个列表并使它们保持程序化同步似乎也不是一个优雅的解决方案。 理想情况下,只需要为UI元素提供对位于客户端范围内的列表的引用。 那么,解决这个问题的“正确”方法是什么?

DataGridView.Rows.RemoveAt(int index)不会删除Windows窗体中的行?

int i = dataGridView1.CurrentRow.Index; dataGridView1.Rows.RemoveAt(i); 上面的代码用于删除当前选中的行(仅允许选择1行),但我仍然可以看到该行保留在datagridview中。 我错过了更新或无效吗? ps:dataGridView1是数据绑定的。 ps2:我使用linq查询绑定数据,我不想再次查询只是为了显示一行被删除,我认为它会降低性能。

如何validationDataGridView输入?

我对DataGridView输入validation有一些严重的问题: 我正在使用Entity Framework开发一个项目,并且我已将DataGridView元素绑定到数据库。 如果用户将一些数据插入到不可为空的列中,然后清除数据以使列保持空白,则单击另一个DataGridView单元格,发生exception并且我收到运行时错误。 或者,如果用户尝试将字符串插入到整数列中,则会得到一条非常长的错误消息,该消息根本不是用户友好的。 是否有任何简单的方法来validationDataGridView单元格?

将嵌套列表绑定到WPFcanvas面板

我想知道是否有可能以某种方式将列表列表绑定到cavas面板。 例如,具有对象“层”,其本身是“矩形”对象的列表。 是否可以将图层列表绑定到canvas? 到目前为止,我只能通过将一个扁平的嵌套列表(使用SelectMany函数)绑定到一个itemcontrol来实现它,但这不够好,我想保持“图层”分开,并使矩形的Zindex根据不同而不同它所在的层,允许轻松地重新排序图层。 我也尝试过嵌套的itemcontrols,但正如预期的那样它只显示第一层。 目的是为canvas上每个图层中的每个对象绘制一个矩形,允许图层操作,在每个图层中插入新对象等等…… 提前致谢! 🙂

如何根据搜索的字符串过滤ListBox中的项目

我有一个包含ListBox的Windows窗体应用程序(C#),我在其中添加了一些项目(我没有使用DataSource)。 我想过滤ListBox中的项目,只显示包含我正在搜索的字符串的项目。 我这样做是通过保留原始项目列表并在每次搜索字符串更改和更新ListBox.Items时从该列表中选择匹配项目 有更优雅/有效的方法吗?

ComboBox数据绑定

我在表单上有一个combobox控件,可以从某些数据源中提取数据(显示和值)。 另一方面,我有一排桌子。 我想当app正在推出时,combobox将selectedvalue或selecteditem设置为上一行中一列的值。 当用户更改了combobox时,它将持续更改为行。 我试图将SelectedValue绑定到此列,但它不起作用。 Combobox只是开始第一项。 有什么问题? 编辑 这是一个Win Forms项目。 这是绑定代码: this.comboBoxCountries = new System.Windows.Forms.ComboBox(); this.countriesBindingSource = new System.Windows.Forms.BindingSource(this.components); // // comboBoxCountries // this.comboBoxCountries.DataBindings.Add(new System.Windows.Forms.Binding(“Text”, this.searchCriteriaBindingSource, “Postcode”, true)); this.comboBoxCountries.DataBindings.Add(new System.Windows.Forms.Binding(“SelectedValue”, this.searchCriteriaBindingSource, “CountryCode”, true)); this.comboBoxCountries.DataSource = this.countriesBindingSource; this.comboBoxCountries.DisplayMember = “Name”; this.comboBoxCountries.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxCountries.FormattingEnabled = true; this.comboBoxCountries.Location = new System.Drawing.Point(190, 19); this.comboBoxCountries.Name = “comboBoxCountries”; this.comboBoxCountries.Size = […]

如何使Label显示带有不同颜色字母的FormattedString?

我使用FormattedString在Xamarin.Forms上的Label上显示自定义文本。 我想要实现的是改变一个或多个元素的颜色,例如: $$ $$。 但即使我改变颜色,Label也会显示所有具有相同颜色的美元符号:$$$$ 这是视图上的标签: 这是绑定到ViewModel上的标签文本的属性的代码 public FormattedString AveragePrice { get { return new FormattedString { Spans = { new Span { Text = “$”, ForegroundColor=Color.Black }, new Span { Text = “$”, ForegroundColor=Color.Black }, new Span { Text = “$”, ForegroundColor=Color.Gray }, new Span { Text = “$”, ForegroundColor=Color.Gray } } }; } […]

绑定到仅显示列表中第一个项目的嵌套属性

我试图将.NET 4.5中的C#Winforms中的ListBox控件绑定到具有嵌套属性的对象列表,我希望将其用于DisplayMember。 除了当我将DisplayMember设置为嵌套属性时,列表框仅显示一个项目,即使列表中有两个项目被绑定,它也是有效的。 如果我注释掉用于设置DisplayMember的代码,则listBox显示两个项目。 这是框架中的错误吗? 我想避免添加另一个属性或覆盖ToString(),如果我可以,因为我正在实现MVP并且希望将我的视图逻辑保持在我的视图中。 以下是一些示例代码。 public partial class Form1 : Form { public Form1() { InitializeComponent(); var bindingSource = new BindingSource(); var listOfMyItems = new BindingList { new MyItem { Number = 1, NestedItem = new NestedItem { Name = “name1”, Note = “note1” } }, new MyItem { Number = 2, NestedItem […]

从类属性获取绑定值,DefaultBindingProperty对我不起作用!

我正在为我的项目创建一些实体(类),我想为它设置一个默认的binging属性,这是一个例子 namespace MyNamespace { [System.ComponentModel.DefaultBindingProperty(“Name”)] public class Person { public int ID { get; set; } public string Name { get; set; } public int Gender { get; set; } } public class Family { public int ID { get; set; } public Person Father { get; set; } } } 如果我有List并希望将它绑定到GridView并添加此字段结果将是MyNamespace.Person但是我需要它来填充属性Name的值而不用使用TemplateField所以我错过了什么? 或DefaultBindingProperty不是正确的属性?