【发布时间】:2016-09-13 21:15:23
【问题描述】:
这是我的问题...我有一个服务器列表,每个服务器都有一个 ID 和 ServerName。我希望能够从 ComboBox 中选择一个服务器并就地编辑它,然后让它的 ID 可用于稍后通过 SQL 更新。所以假设这是数据:(ID=1, Name="Server1"), (ID=2, Name="Server2"), (ID=3, Name="Server3")。如果我从 ComboBox 中选择 Server3,我想将其编辑为“Server4”,然后使用 SQL 查询上传(我知道如何执行此部分)。我正在使用 MVVM,所以所有值都是我的 ViewModel 的属性。
目前,当 ComboBox 中的文本字段被修改时,SelectedServer 立即变为 null,可能是因为它不再是它识别的值。我可以使用一些指导来帮助我完成我想做的事情。
<ComboBox Grid.Column="1" x:Name="serverNameUpdateBox" HorizontalAlignment="Stretch" Height="23" VerticalAlignment="Center" IsEditable="True"
ItemsSource="{Binding Path=DataContext.SelectedProjectServers, ElementName=main}"
DisplayMemberPath="ServerName"
SelectedValue="{Binding SelectedServer}"
SelectedValuePath="ServerName"
Text="{Binding SelectedServer.ServerName, UpdateSourceTrigger=LostFocus}"
/>
和ViewModel相关代码:
namespace ViewModel
{
public class ViewModel : INotifyPropertyChanged
{
public ViewModel()
{
SelectedProjectServers = new List<Server>();
SelectedServer = new Server();
private Server _selectedServer;
public Server SelectedServer
{
get { return _selectedServer; }
set
{
if (value == null) { ModifiedServer = _selectedServer; }
_selectedServer = value;
RaisePropertyChanged("SelectedServer");
}
}
private List<Server> _selectedProjectServers;
public List<Server> SelectedProjectServers
{
get { return _selectedProjectServers; }
set
{
_selectedProjectServers = value;
RaisePropertyChanged();
}
}
}
}
}
及模型相关代码:
namespace Model
{
public class Server : INotifyPropertyChanged
{
private string _serverName;
public string ServerName
{
get { return _serverName; }
set
{
_serverName = value;
RaisePropertyChanged();
}
}
private int _serverID;
public int ServerID
{
get { return _serverID; }
set
{
_serverID = value;
RaisePropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged([CallerMemberName] string caller = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(caller));
}
}
}
【问题讨论】: