- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 MVVM 和 mySql 数据库构建 WPF 应用程序。我很难从存储在属性中的 ComboBox 获取 SelectedItem
。基本上,此时,我希望将 SelectedItem
显示在文本框中。这将帮助我更好地理解绑定(bind)过程,因为我仍在学习。
最终,我想使用存储的值/属性作为从数据库中提取另一个值的引用。下面是一些示例代码。任何帮助将不胜感激。谢谢!
查看
<Grid Background="AliceBlue">
<Label Content="Street Address" HorizontalAlignment="Left" Margin="10,54,0,0" VerticalAlignment="Top" Width="87" Height="28"/>
<Label Content="State" HorizontalAlignment="Left" Margin="10,125,0,0" VerticalAlignment="Top" Width="87" Height="22"/>
<TextBox Name="txtStreetAddress" HorizontalAlignment="Left" Height="23" Margin="119,55,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"
Text="{Binding StreetAddress, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
<ComboBox Name="cboState"
HorizontalAlignment="Left" Margin="119,125,0,0" VerticalAlignment="Top" Width="52"
DisplayMemberPath="StateAbb"
ItemsSource="{Binding StateAbbList}"
SelectedItem="{Binding SelectedStateAbb, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
<TextBox HorizontalAlignment="Left" Height="23" Margin="180,124,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="59"
Text="{Binding SelectedStateAbb, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
</Grid>
查看模型
public class AddStreetAddressVM : ObservableObject, IPageViewModel
{
public string Name
{
get
{
return "Add Street Address";
}
}
const string dbConnectionString = @"datasource=localhost;port=3306;Initial Catalog='optest1a1';username=root;password=";
private ICommand _cboStateAbb;
private string _streetAddress;
private ObservableCollection<tblStateAbb> _stateAbbList;
private string _selectedStateAbb;
private int _selectedStateNum;
public ICommand CboStateAbb
{
get
{
if (_cboStateAbb == null)
{
_cboStateAbb = new RelayCommand(param => this.fillStateAbb(), null);
}
return _cboStateAbb;
}
}
public string StreetAddress
{
get { return _streetAddress; }
set { SetProperty(ref _streetAddress, value, () => StreetAddress); }
}
public ObservableCollection<tblStateAbb> StateAbbList
{
get { return _stateAbbList; }
set
{
SetProperty(ref _stateAbbList, value, () => StateAbbList);
}
}
public string SelectedStateAbb
{
get { return _selectedStateAbb; }
set
{
SetProperty(ref _selectedStateAbb, value, () => SelectedStateAbb);
//if (_selectedStateAbb != null)
//{
// GetStateNum();
//}
//_selectedStateAbb = value;
}
}
public int SelectedStateNum
{
get { return _selectedStateNum; }
set { SetProperty(ref _selectedStateNum, value, () => SelectedStateNum); }
}
public AddStreetAddressVM() : base()
{
StateAbbList = new ObservableCollection<tblStateAbb>();
fillStateAbb();
}
private void fillStateAbb()
{
using (MySqlConnection con = new MySqlConnection(dbConnectionString))
{
StateAbbList = new ObservableCollection<tblStateAbb>();
con.Open();
string Query = "SELECT * FROM tbl_states";
MySqlCommand createCommand = new MySqlCommand(Query, con);
MySqlDataReader dr = createCommand.ExecuteReader();
int count = 1;
while (dr.Read())
{
string StateAbb = dr.GetString(2);
tblStateAbb stateabb = new tblStateAbb(count, StateAbb);
StateAbbList.Add(stateabb);
count++;
}
con.Close();
}
}
private void GetStateNum()
{
using (MySqlConnection con = new MySqlConnection(dbConnectionString))
{
con.Open();
string Query = "SELECT State_Num FROM tbl_states WHERE State_Abb='" + SelectedStateAbb + "' ";
MySqlCommand createCommand = new MySqlCommand(Query, con);
MySqlDataReader dr = createCommand.ExecuteReader();
int count = 1;
while (dr.Read())
{
int StateNum = dr.GetInt32(1);
StateNum = SelectedStateNum;
}
con.Close();
}
}
}
模型 - 状态缩写
public class tblStateAbb : ObservableObject
{
private Int32 _count;
private String _stateAbb;
private Int32 _stateNum;
private ObservableCollection<tblStateAbb> _tblStateAbb;
public Int32 Count
{
get { return _count; }
set { SetProperty(ref _count, value, () => Count); }
}
public String StateAbb
{
get { return _stateAbb; }
set { SetProperty(ref _stateAbb, value, () => StateAbb); }
}
public Int32 StateNum
{
get { return _stateNum; }
set { SetProperty(ref _stateNum, value, () => StateNum); }
}
public ObservableCollection<tblStateAbb> StateAbbList
{
get { return _tblStateAbb; }
set { SetProperty(ref _tblStateAbb, value, () => StateAbbList); }
}
public tblStateAbb() : base()
{
Count = 0;
StateAbb = "";
StateAbbList = new ObservableCollection<tblStateAbb>();
}
public tblStateAbb(int count, string stateabb) : base()
{
Count = count;
StateAbb = stateabb;
StateAbbList = new ObservableCollection<tblStateAbb>();
}
public tblStateAbb(int count, string stateabb, int statenum) : base()
{
Count = count;
StateAbb = stateabb;
StateNum = statenum;
StateAbbList = new ObservableCollection<tblStateAbb>();
}
}
可观察对象(INotifyPropertyChange)
public abstract class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propName)
{
Debug.Assert(GetType().GetProperty(propName) != null);
var pc = PropertyChanged;
if (pc != null)
{
pc(this, new PropertyChangedEventArgs(propName));
}
}
protected bool SetProperty<T>(ref T field, T value, string propName)
{
if (!EqualityComparer<T>.Default.Equals(field, value))
{
field = value;
OnPropertyChanged(propName);
return true;
}
return false;
}
protected bool SetProperty<T>(ref T field, T value, Expression<Func<T>> expr)
{
if (!EqualityComparer<T>.Default.Equals(field, value))
{
field = value;
var lambda = (LambdaExpression)expr;
MemberExpression memberExpr;
if (lambda.Body is UnaryExpression)
{
var unaryExpr = (UnaryExpression)lambda.Body;
memberExpr = (MemberExpression)unaryExpr.Operand;
}
else
{
memberExpr = (MemberExpression)lambda.Body;
}
OnPropertyChanged(memberExpr.Member.Name);
return true;
}
return false;
}
}
中继命令
public class RelayCommand : ICommand
{
private Action<object> execute;
private Func<object, bool> canExecute;
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
this.execute = execute;
this.canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return this.canExecute == null || this.canExecute(parameter);
}
public void Execute(object parameter)
{
this.execute(parameter);
}
}
最佳答案
由于SelectedStateAbb
是一个字符串
,因此您应该将ComboBox
的SelectedValuePath
属性设置为“StateAbb”并将 SelectedValue
属性绑定(bind)到 SelectedStateAbb
:
<ComboBox Name="cboState"
HorizontalAlignment="Left" Margin="119,125,0,0" VerticalAlignment="Top" Width="52"
DisplayMemberPath="StateAbb"
SelectedValuePath="StateAbb"
ItemsSource="{Binding StateAbbList}"
SelectedValue="{Binding SelectedStateAbb, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<TextBox HorizontalAlignment="Left" Height="23" Margin="180,124,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="59"
Text="{Binding SelectedStateAbb, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
关于c# - WPF MVVM 组合框 SelectionChanged/SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47381176/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!