【发布时间】:2024-04-23 09:55:02
【问题描述】:
我在谷歌上尝试了很多解决这个问题的方法,但似乎都没有帮助。 我在每一行都有一个按钮,单击该按钮会打开一个带有文本框的新窗口。此窗口应显示选定的行单元格数据。 我从 mysql 数据库加载数据网格。
查看
第二个窗口的文本框 (XML)
<Label Content="{Binding sFirstName, Mode=OneWay }" /><Label Content="{Binding sLastName, Mode=OneWay }" />
数据网格
<DataGrid ItemsSource="{Binding Path=MM}" SelectionMode="Extended" SelectedItem="{Binding SelectedItem}" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=sFirstName}" />
<DataGridTextColumn Binding="{Binding Path=sLastName}" />
</DataGrid.Columns>
型号
public class MM : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string PropertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName)); }
private string _sFirstName, _sLastName;
public string sFirstName { get { return _sFirstName; } set { if (_sFirstName != value) { _sFirstName = value; OnPropertyChanged("sFirstName"); } } }
public string sLastName { get { return _sLastName; } set { if (_sLastName != value) { _sLastName = value; OnPropertyChanged("sLastName"); } } }
public DataRowView SelectedRow
{
get { return SelectedRow; }
set { SelectedRow = value; OnPropertyChanged("SelectedItem"); }
}
}
查看模型
Public class MV : INotifyPropertyChanged
{
private ICommand cmdLoad;
public ICommand CmdLoad { get { if (cmdLoad == null) cmdLoad = new RelayCommand(p => OnLoad()); return cmdLoad; } }
private void OnLoad() { Load(); }
public ObservableCollection<FinTuitionM> finTuitionM { get; set; }
public ClrIdVMD()
{
Load();
}
public void Load()
{
}
}
代码隐藏 (cs)
public partial class Home : Window
{
MV mv;
public Home()
{ InitializeComponent();
mv = new MV(); DataContext = mv;
}
}
【问题讨论】:
-
你设置了
DataContext = new MV();。然后你设置一个绑定到它<DataGrid ItemsSource="{Binding Path=MM}" ... SelectedItem="{Binding SelectedItem}" >。但是类型 MV 没有属性 MM и SelectedItem。从侧面看,一般来说,你在做什么是没有意义的。请提供进一步的说明。 -
您不需要创建一个会占用大量内存的新 MV()。您可以在构造函数中传递内容:public Home(DataContext mv),然后在调用 Home 类时添加参数:new Home(context);