无法将项目添加到可观察集合(或 UI 未刷新)



我有一个noob问题。正如标题所说,我对一个可观察的集合有问题。我试图填充一个通过TextBox传递值的集合,然后将其添加到一个可观察的集合中。当我按下按钮">添加Ciudad"时,会显示一个插入新值的TextBox和一个保存新值的按钮。该值成功地传递给负责执行此操作的方法(">添加输入城市"(,但UI从未显示新项目。顺便说一句,在">Load Ciudades"中手动添加的第一个值显示正确。

我看到了一些相关的问题,但我仍然无法解决这个问题。

我怀疑我没有正确添加项目。更麻烦的是,我完全不懂C#:D。这是你可以判断的代码:

城市模型:

public class Ciudad : INotifyPropertyChanged
{
private string nombre;
public String Nombre
{
get { return nombre; }
set {
nombre = value;
RaisePropertyChanged("Nombre");
RaisePropertyChanged("Ciudades"); //Dunno if this one is necesary.
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}

城市视图模型:

public ObservableCollection<Ciudad> Ciudades { get; } = new ObservableCollection<Ciudad>();
public void LoadCiudades()
{
Ciudades.Add(new Ciudad { Nombre = "Random city" });
}
public void AddInputCity(string new_city)
{
Ciudades.Add(new Ciudad { Nombre = new_city });
}

城市视图:

<Grid>
<DataGrid ItemsSource = "{ Binding Path = Ciudades, UpdateSourceTrigger=PropertyChanged }" Name="DGrid">
</DataGrid>
<Button Click="Button_Click" Height="30" Width="150" Margin="0,250,0,0">Add Ciudad</Button></Grid>

城市视图cs

TextBox iTextBox;
public CiudadesView()
{
InitializeComponent();
}
private void Add_Input_Text()
{
TextBox iText = new TextBox
{
Name = "iText",
Width = 250,
Margin = new Thickness(100)
};
Button saveBtn = new Button()
{
Content = "Save"
};
saveBtn.Click += new RoutedEventHandler(Button_Save_Click);
sPanel.Children.Add(iText);
sPanel.Children.Add(saveBtn);
iTextBox = iText;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Add_Input_Text();
}
private void Button_Save_Click(object sender, RoutedEventArgs e)
{
string ciudadNuevoNombre = iTextBox.Text;
CiudadesViewModel viewModel = new CiudadesViewModel();
viewModel.AddInputCity(ciudadNuevoNombre);
}

有什么想法或建议吗?谢谢大家!:(

确保在Button_Click事件处理程序中调用现有视图模型实例的AddInputCity方法,例如:

private void Button_Click(object sender, RoutedEventArgs e)
{
var viewModel = DataContext as YourViewModelClass;
if (viewModel != null)
viewModel.AddInputCity("new...");
}

您还没有向我们展示您的点击代码以及其他一些东西,比如视图和视图模型之间的关系。我建议您也考虑一下绑定命令,而不是单击处理程序。这是一篇旨在向读者介绍MVVM的文章,它使用以下命令将一个项添加到绑定的可观察性集合中:https://social.technet.microsoft.com/wiki/contents/articles/32164.wpf-mvvm-step-by-step-2.aspx

最新更新