- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的组合框,如下所示:
<ComboBox ItemsSource="{DynamicResource ItemsCompColl}"
TextSearch.TextPath="ItemName"
SelectedValue="{Binding ItemId, UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}" SelectedValuePath="ItemId"
Grid.IsSharedSizeScope="True">
........................
</ComboBox>
效果很好。现在,我正在使用绑定(bind)在 SelectedValue 中的 ItemId 属性来检查用户是否从组合框中选择了合适的项目。
问题:
当用户从 ComboBox 中选择一个值时,ItemId 属性设置为 ComboBox 中所选项目的 ID。之后,如果用户转到下一个控件并返回到 ComboBox 并向 ComboBox 输入一些垃圾值,则 ComboBox 的 ItemId 不会更改,我的意思是它不会重置为“0”。因此,我的验证失败,用户成功输入了垃圾值。
最佳答案
好的,所以当 ComboBox
的可编辑 TextBox
中出现任何验证错误时,您希望将 SelectedValue
设置为 0。您需要检查 Text
的验证结果,如果验证失败,则将您的 SelectedValue
重置为 0。
这是一个适合您的工作示例:
XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<ComboBox ItemsSource="{Binding ComboboxItems}"
IsEditable="True" DisplayMemberPath="ItemName"
Text="{Binding SelectedName, ValidatesOnDataErrors=True}"
SelectedValue="{Binding SelectedID, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="ItemId"
Grid.IsSharedSizeScope="True">
</ComboBox>
<TextBox Text="{Binding SelectedID,UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</Grid>
</Window>
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.ComponentModel;
using System.Collections.ObjectModel;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
MyViewModel mvm;
public MainWindow()
{
InitializeComponent();
mvm = new MyViewModel()
{
ComboboxItems = new ObservableCollection<ComboItem>()
{
new ComboItem{ItemName="item1",ItemId=1},
new ComboItem{ItemName="item2",ItemId=2},
new ComboItem{ItemName="item3",ItemId=3}
},
};
this.DataContext = mvm;
}
}
public class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, e);
}
}
protected void RaisePropertyChanged(String propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
}
public class ComboItem : ObservableObject
{
private string _itemname;
private int _itemid;
public string ItemName
{
get
{
return _itemname;
}
set
{
_itemname = value;
RaisePropertyChanged("ItemName");
}
}
public int ItemId
{
get { return _itemid; }
set
{
_itemid = value;
RaisePropertyChanged("ItemId");
}
}
}
public class MyViewModel : ObservableObject, IDataErrorInfo
{
private int _selectedid;
private string _selectedname;
public ObservableCollection<ComboItem> ComboboxItems
{
get;
set;
}
public int SelectedID
{
get { return _selectedid; }
set
{
if (_selectedid != value)
{
_selectedid = value;
RaisePropertyChanged("SelectedID");
}
}
}
public string SelectedName
{
get { return _selectedname; }
set
{
if (_selectedname != value)
{
_selectedname = value;
RaisePropertyChanged("SelectedName");
}
}
}
public string Error
{
get { return this[SelectedName]; }
}
public string this[string columnName]
{
get {
switch (columnName)
{
case "SelectedName":
{
if (SelectedName!=null && ComboboxItems.Count(x => x.ItemName == SelectedName) == 0)
{
//reset selected value to 0
this.SelectedID = 0;
return "Invalid selection";
}
break;
}
}
return null;
}
}
}
}
结果:
当用户输入有效文本(例如 item1)时,下面的 Textbox
显示 SelectedValue
的正确 ItemId
,当用户输入无效时文本,所选值将重置为 0。
P.S: 当在 ComboBox
中输入垃圾时,它将始终显示验证错误指示器(如上所示的红色边框),并且如果您将 SelectedItem
数据绑定(bind)到属性,它将为空。所以你不应该关心 SelectedValue
如果有错误,这就是为什么我说我不能在评论中重现错误。
关于c# - 在 ComboBox 中输入垃圾时将 SelectedValue 设置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37569800/
我正在尝试将 ComboBox SelectedValue 绑定(bind)到 string。 Binding 完美运行。但是,我的 ComboBoxItem 的 IsSelected 之一设置为 T
我有一个 WebForms 页面,上面有两个 DropDownList 控件,它们都包含 60-80 度的温度范围,一个用于加热,另一个用于冷却。它们在 .aspx 中声明为: 每个列表的值都使用
我有一个带有项目A,B,C,D,E的ComboBox。 用户选择后如何更改组合框的SelectedValue,因此,如果用户从列表项“A”中选择,则SelectedValue将为“D”(就像他自己选择
我在一个项目中使用 flex 4.0 和 ZK 框架。 我有 4 个状态,这些状态中有 3 个单选按钮组。 其中 2 个处于第一状态,其中 1 个处于第四状态。 我的问题是,我可以像这样获取前 2 个
问题很奇怪,我有一个组合框,它通过 DataSource 属性正确地填充了项目(它绑定(bind)到一个 bindingSource 项目,它包含一个显示成员和一个值成员),这是一个允许我选择供应商的
我在类中创建了一个组合框,并想为该组合框设置选定值。但是当我这样做时,selectedValue 保持为空,当我尝试设置 selectedIndex 时,我得到一个 ArgumentOutOfRang
我有一个连接到 ObjectDataSource 的 DropDownList。在我的页面加载中,我根据情况将 selectedvalue 设置为特定值。如何在我的方法 selectedindexch
我已经查看了一些解决方案,但对我来说还没有任何效果。 我正在为这个项目使用 MVVM,并且有一个无法设置 SelectedItem 属性的 ListView。 如果这是我的(简化的)XAML。
我在下拉列表方面遇到了一些问题,我需要将初始值传递给 View 模型,因此下拉列表将填充已选择的值。 据我所知(参见 this fiddle ): var additionalTravellersDe
我正在尝试根据查询字符串中传递的值来设置未绑定(bind)的 DropDownList 的值。这是我的代码: ListItem item = null; for (int x
对于我正在尝试构建的简单练习题,我的代码是这样的。我遇到了 Invalid Cast Exception. Specified Cast is not valid. public Form1() {
没有发布我的全部代码(我只是发布了有问题的脚本),我遇到了一个问题,似乎很多人都遇到过,但我的似乎没有响应其他推荐的修复程序。我在 VS2008 中使用 C#。 基本上我有一个组合框,当更改项目初始化
我有一个功能区组合框(MS Ribbon OpenSource 项目,.Net 4.0),它是数据绑定(bind)到我的 View 模型的属性,如下所示: XAML:
如果下拉列表在范围内,我如何设置下拉列表的选定值Gridview 和下拉列表在编辑时由 objectdatasource 填充按钮被点击? 我的应用发生了什么情况是下拉列表被填充但第一项始终显示为选定
drpDwnLstBillContact.SelectedValue = billContactId.ToString(); drpDwnLstRegContact.SelectedValue =
这段代码有什么问题? myComboBox.Items.Clear(); myComboBox.Items.AddRange(new string[]{"one","two"}); myComboBo
我整理了以下代码来演示我遇到的问题。 这是一个只有组合框的表单,在加载方法中使用从 LINQ 生成的数组填充组合框。 它设置了 DisplayMember 和 ValueMember。显示成员按预期工
我有一个在表单加载时填充的 ComboBox。我以数据集的形式从数据库中获取数据,并使用以下内容填充组合框。 checkBox4_combo.DataSource = ds.Tables[0].Def
所以我正在连接一个sql数据库。我有一个 asp.net 页面,当用户选择状态下拉列表并选择已关闭的值,然后单击更新票证按钮时,我需要它来更新表中的 Closed_date 列。 我的表有列 Clos
我正在尝试将对象添加到组合框中并使用 SelectedValue 属性来选择组合框中的项目,但它不起作用:SelectedValue 在作业。 class ComboBoxItem
我是一名优秀的程序员,十分优秀!