C# WPF Datagrid未接收递增值
我在MainWindow.xaml中有一个WPF Datagrid,数据正从另一个表单(AddFixtures.xaml)传递给它。我在AddFixtures.xaml.cs中有一个“Fixture”类:C# WPF Datagrid未接收递增值,c#,wpf,datagrid,C#,Wpf,Datagrid,我在MainWindow.xaml中有一个WPF Datagrid,数据正从另一个表单(AddFixtures.xaml)传递给它。我在AddFixtures.xaml.cs中有一个“Fixture”类: public class Fixture { public int fixtureID { get; set; } public int channelID { get; set; } public string fixtureName
public class Fixture
{
public int fixtureID { get; set; }
public int channelID { get; set; }
public string fixtureName { get; set; }
public string position { get; set; }
public string patch { get; set; }
public string mode { get; set; }
public string power { get; set; }
public string direction { get; set; }
public int channelsUsed { get; set; }
}
private void BtnAddFixture_Click(object sender, RoutedEventArgs e)
{
int quantity = Int32.Parse(txtQuantity.Text);
for (int i = 0; i < quantity; i++)
{
MainWindow.fixtureData.Add(new Fixture()
{
fixtureID = Int32.Parse(txtFixtureID.Text),
channelID = Int32.Parse(txtChannelID.Text),
fixtureName = cbxFixture.Text,
position = cbxPosition.Text,
patch = cbxUniverse.Text + "." + txtChannel.Text,
mode = cbxMode.Text,
power = cbxSocca.Text + "." + cbxWay.Text,
direction = "Forwards",
channelsUsed = Int32.Parse(lblChannels.Content.ToString())
});
fixtureID++;
channelID++;
txtFixtureID.Text = fixtureID.ToString();
txtChannel.Text = channelID.ToString();
}
}
此(MainWindow.xaml.cs)接收到的:
基本上,我将信息输入另一个表单并按下按钮,然后将数据添加到DataGrid。我有一些信息需要根据数量增加。我已经得到了这个增量,但是在DataGrid中,它总是显示输入的第一个值。当我单击(AddFixtures.xaml.cs)中的按钮时,将执行以下代码:
private void BtnAddFixture\u单击(对象发送方,路由目标)
{
int quantity=Int32.Parse(txtQuantity.Text);
对于(int i=0;i
如果您调试FixtureView,将非常感谢您的帮助。列表中添加的项目是否可用?如果是这样,您有一个问题,即添加项目时无法识别视图?
可能您将网格的源更改为-->这将在更新任何内容时更新视图 作为第一步,您应该创建一个具有如下FixtureData属性的视图模型类:
public observeCollection FixtureData{get;}=new observeCollection()代码>。然后两个窗口将视图模型类的相同实例分配给它们的DataContext
属性。然后DataGrid将其ItemsSource绑定为
,而按钮将向集合添加项,如var vm=(MainViewModel)DataContext;添加(新夹具{…})代码>。在web上搜索MVVM
。这很有意义,但如何将vm类的同一实例分配给数据上下文?创建一个MainViewModel对象,并根据需要将其分配给任意多个窗口的DataContext。例如,在主窗口构造函数中创建它,如DataContext=newmainviewmodel()代码>。如果从主窗口打开另一个窗口,请写入var newWindow=new ChildWindow{DataContext=DataContext}代码>除此之外,行FixtureView.Items.Add(fixtureData)代码>看起来可疑。似乎您正在将整个fixtureData
集合作为单个项目添加。当然不正确。虽然这通常应该是一个评论而不是一个答案,但它也有部分是错误的。即使使用ObservableCollection,当项目属性更改时,UI也不会更新。完全不是“如果有任何更新”。
private void BtnAddFixture_Click(object sender, RoutedEventArgs e)
{
int quantity = Int32.Parse(txtQuantity.Text);
for (int i = 0; i < quantity; i++)
{
MainWindow.fixtureData.Add(new Fixture()
{
fixtureID = Int32.Parse(txtFixtureID.Text),
channelID = Int32.Parse(txtChannelID.Text),
fixtureName = cbxFixture.Text,
position = cbxPosition.Text,
patch = cbxUniverse.Text + "." + txtChannel.Text,
mode = cbxMode.Text,
power = cbxSocca.Text + "." + cbxWay.Text,
direction = "Forwards",
channelsUsed = Int32.Parse(lblChannels.Content.ToString())
});
fixtureID++;
channelID++;
txtFixtureID.Text = fixtureID.ToString();
txtChannel.Text = channelID.ToString();
}
}