【发布时间】:2021-09-20 12:18:16
【问题描述】:
对 WPF 非常陌生。我正在尝试实现一些相对简单但被证明很困难的事情。
基本上,我想将一个项目添加到我的列表框中。列表框是在我的 LiveView xaml/类中创建的,但我想在我的 SettingsView 类中按下按钮时更新列表框的内容。
SettingsView 类:
public partial class SettingsView : UserControl
{
public SettingsView()
{
InitializeComponent();
}
private void StartButton_Click(object sender, RoutedEventArgs e)
{
var myLiveView = new LiveView();
myLiveView.updateListBox();
}
}
LiveView 类:
public partial class LiveView : UserControl
{
public LiveView()
{
InitializeComponent();
}
public void updateListBox()
{
CommentListBox.Items.Add("Another item");
}
}
如果我执行以下操作,则代码可以正常工作,并且项目会在启动时成功添加到我的列表中。
public partial class LiveView : UserControl
{
public LiveView()
{
InitializeComponent();
CommentListBox.Items.Add("Another item");
}
}
为什么我只能在 Liveview class() 中更新 UI?解决这个问题的正确方法是什么?如何从另一个类/视图更新我的 ListBox?我正在创建的 LiveView 实例似乎实际上并没有做任何事情。任何帮助将不胜感激,谢谢。
【问题讨论】:
-
你这里没有使用 mvvm。您的 LiveView 用户控件未更新的原因是因为您正在创建一个不属于可视化树的新控件: var myLiveView = new LiveView();我建议使用 mvvm 执行此操作(在 youtube 或大量教程网站上有很多基本教程),但您也可以在 xaml 中为您的用户控件指定一个名称,并在其中使用 ElementName="YourName 声明它" 然后使用后面代码中的 YourName.updateListBox() 方法。
-
MVVM 看起来非常复杂。你能提供任何有用的链接吗?很多教程似乎使用静态数据,我需要我的 ListBox 是动态的
标签: c# wpf mvvm listboxitem