【发布时间】:2021-10-28 16:02:03
【问题描述】:
我是 WPF 中 MVVM 的新手,但我目前的项目是这个。我有一个TabControl 和一个TabItem 我有一个DataGrid 我得到这样的数据:
new Zwerg { Name = "Gimli", Alter = 140,Stamm="Elbknechte", Magwert = "12 & 15", Waffe = _Zwerg.Waffe, Machtfaktor = 27, Steuern = 27 * 2.125 },
new Zwerg { Name = "Zwingli", Alter = 70, Stamm = "Elbknechte", Magwert = "45 & 15", Waffe = "Zauberstab & Streithammer", Machtfaktor = 60, Steuern = 60 * 2.125 },
new Zwerg { Name = "Gumli", Alter = 163, Stamm = "Altobarden", Magwert = "17", Waffe = "Axt", Machtfaktor = 17, Steuern = 17 * 2.125 }
我还有另一个TabItem,我有3 个RadioButtons 和一个TextBox。这 3 个 RadioButtons 用于我的 DataGrid 中的 3 个名称。当检查987654336 RadioButton 987654337 @的文本时,@应该是我的DataGrid中的 waffe em>单元格的新值,使 waffe的当前值 将TextBox.Text 更改为适当的名称。点击后:
来自Gumli 的DataGrid 数据的Waffe 行从此更改:
到这里:
所以这取决于选择的名称,只有选择名称的“武器”部分应该自动更改为我的TextBox的值。
我第一次尝试使用 MVVM。
这是我的视图模型代码:
public class ViewModel : INotifyPropertyChanged
{
private ICollectionView _zwerge;
Zwerg _Zwerg = new Zwerg();
public ViewModel()
{
Zwerge = CollectionViewSource.GetDefaultView(GetData());
}
public ICollectionView Zwerge
{
get => _zwerge;
set
{
_zwerge = value;
NotifyPropertyChanged(nameof(Zwerge));
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void UpdatePersons() => _zwerge?.Refresh();
public IList<Zwerg> GetData()
{
return new List<Zwerg>
{
new Zwerg { Name = "Gimli", Alter = 140,Stamm="Elbknechte", Magwert = "12 & 15", Waffe = _Zwerg.Waffe, Machtfaktor = 27, Steuern = 27 * 2.125 },
new Zwerg { Name = "Zwingli", Alter = 70, Stamm = "Elbknechte", Magwert = "45 & 15", Waffe = "Zauberstab & Streithammer", Machtfaktor = 60, Steuern = 60 * 2.125 },
new Zwerg { Name = "Gumli", Alter = 163, Stamm = "Altobarden", Magwert = "17", Waffe = "Axt", Machtfaktor = 17, Steuern = 17 * 2.125 }
};
}
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
从我的Zwerg 班级我得到这样的数据:
string _Waffe;
public string Waffe
{
get => _Waffe;
set { _Waffe = value; }
}
我试图让它工作:
private void Gumlie_Click(object sender, RoutedEventArgs e)
{
Zwerg _zwerg = new Zwerg();
_zwerg.Waffe = addZwerg.Text;
}
但这没有用。这就是我在 XAML 中绑定 DataGrid 数据的方式:
ItemsSource="{Binding Zwerge}"
【问题讨论】: