C# WPF MVVM清除绑定到Listview SelectedItem的文本框
我正试图学习C#mvvm和wpf,所以我决定做一个简单的项目(一个图书馆的图书和读者管理应用程序),现在我有点迷路了,所以我真的很想得到一些帮助。 在我的视图中,我有一个显示读卡器的列表视图,还有一堆绑定到列表视图的选定项(名称、地址等)的文本框。 listview绑定到使用Linq2SQL从数据库表(读卡器)创建的可观察的读卡器集合 在文本框下面有几个按钮(清除/添加/保存/删除) 我遇到的问题是,如果我在单击按钮时尝试执行某些命令,listview的“选定项”似乎为空C# WPF MVVM清除绑定到Listview SelectedItem的文本框,c#,wpf,listview,mvvm,C#,Wpf,Listview,Mvvm,我正试图学习C#mvvm和wpf,所以我决定做一个简单的项目(一个图书馆的图书和读者管理应用程序),现在我有点迷路了,所以我真的很想得到一些帮助。 在我的视图中,我有一个显示读卡器的列表视图,还有一堆绑定到列表视图的选定项(名称、地址等)的文本框。 listview绑定到使用Linq2SQL从数据库表(读卡器)创建的可观察的读卡器集合 在文本框下面有几个按钮(清除/添加/保存/删除) 我遇到的问题是,如果我在单击按钮时尝试执行某些命令,listview的“选定项”似乎为空 当我点击清除按钮时,
- 当我点击清除按钮时,如果我在所选项目(读卡器)上有一个断点,它将显示为空/空,但文本框不清除; 如果在Clear方法中使用SelectedReader属性,并为其属性分配空格,则listview中的选定项也会清除(因为它绑定到读卡器的FullName属性)
- 我在添加新读卡器和保存更改方面还有其他问题,我认为这是因为错误的linq查询,但我希望可以修复当前的问题,然后继续
public class MainWindowViewModel : ViewModelBase
{
private Reader selectedReader;
private ObservableCollection<Reader> readerList;
public MainWindowViewModel()
{
SelectedReader = new Reader()
{
FullName = "",
SerialNumber = "",
IdNumber = "",
Adress = "",
AltContactMethods = ""
};
BookDBDataContext rdb = new BookDBDataContext();
ReadersList = new ObservableCollection<Reader>(rdb.Readers);
AddR = new TblQryCommand(AddToDb);
EditR = new TblQryCommand(EditToDb);
DeleteR = new TblQryCommand(DeleteFromDb);
ClearR = new TblQryCommand(ClearReaderFields);
}
public TblQryCommand AddR { get; private set; }
public TblQryCommand EditR { get; private set; }
public TblQryCommand DeleteR { get; private set; }
public TblQryCommand ClearR { get; private set; }
//Reader List
public ObservableCollection<Reader> ReadersList
{
get { return readerList; }
set
{
if (readerList != value)
{
readerList = value;
RaisePropertyChanged();
}
}
}
public Reader SelectedReader
{
get { return selectedReader; }
set
{
if (selectedReader != value)
{
selectedReader = value;
RaisePropertyChanged();
}
}
}
public void AddToDb()
{
BookDBDataContext db = new BookDBDataContext();
Reader r = new Reader
{
FullName = SelectedReader.FullName,
SerialNumber = SelectedReader.SerialNumber,
IdNumber = SelectedReader.IdNumber,
Adress = SelectedReader.Adress,
AltContactMethods = SelectedReader.AltContactMethods
};
db.Readers.InsertOnSubmit(r);
db.Readers.Context.SubmitChanges();
}
public void DeleteFromDb()
{
}
public void EditToDb()
{
}
public void ClearReaderFields()
{
SelectedReader = new Reader
{
Id = 0,
FullName = string.Empty,
SerialNumber = string.Empty,
IdNumber = string.Empty,
Adress = string.Empty,
AltContactMethods = string.Empty
};
}
公共类MainWindowViewModel:ViewModelBase
{
私人阅读器选择阅读器;
私有可观察收集阅读器列表;
公共主窗口视图模型()
{
SelectedReader=新读卡器()
{
全名=”,
SerialNumber=“”,
IdNumber=“”,
地址:”,
AltContactMethods=“”
};
BookDBDataContext rdb=新的BookDBDataContext();
ReadersList=新的可观察集合(rdb.Readers);
AddR=新的TblQryCommand(AddToDb);
EditR=新的TblQryCommand(EDITODB);
DeleteR=新的TblQryCommand(DeleteFromDb);
ClearR=新的TblQryCommand(ClearReaderFields);
}
public TblQryCommand AddR{get;private set;}
公共TblQryCommand EditR{get;专用集;}
public TblQryCommand DeleteR{get;private set;}
public TblQryCommand clear{get;private set;}
//读者名单
公共可观察收集阅读器列表
{
获取{return readerList;}
设置
{
if(readerList!=值)
{
readerList=值;
RaisePropertyChanged();
}
}
}
公共阅读器选择阅读器
{
获取{return selectedReader;}
设置
{
如果(selectedReader!=值)
{
selectedReader=值;
RaisePropertyChanged();
}
}
}
public void AddToDb()
{
BookDBDataContext db=new BookDBDataContext();
读卡器r=新读卡器
{
FullName=SelectedReader.FullName,
SerialNumber=SelectedReader.SerialNumber,
IdNumber=SelectedReader.IdNumber,
地址=选定的读卡器地址,
AltContactMethods=SelectedReader.AltContactMethods
};
db.Readers.InsertOnSubmit(r);
db.Readers.Context.SubmitChanges();
}
public void DeleteFromDb()
{
}
公共无效EDITODB()
{
}
公共无效ClearReaderFields()
{
SelectedReader=新读卡器
{
Id=0,
FullName=string.Empty,
SerialNumber=string.Empty,
IdNumber=string.Empty,
Adress=string.Empty,
AltContactMethods=string.Empty
};
}
视图:
您是否尝试将文本框的文本属性的
绑定直接设置为ViewModel的SelectedReader
-属性?
因此,与其写这封信:
<TextBox x:Name="txtBxFullName" Text="{Binding ElementName=listviewReaders, Path=SelectedItem.FullName, Mode=TwoWay, UpdateSourceTrigger=Explicit}" ... />
你会写:
<TextBox x:Name="txtBxFullName" Text="{Binding Path=SelectedReader.FullName, Mode=TwoWay, UpdateSourceTrigger=Explicit}" ... />
<TextBox x:Name="txtBxFullName" Text="{Binding Path=SelectedReader.FullName, Mode=TwoWay, UpdateSourceTrigger=Explicit}" ... />