从另一个控件子控件更新控件

4
我在尝试更新表面元素组件时遇到了一些问题。我不知道我的方法是否有误,因为我是新手。以下是我想要表达的内容:
根据菜单中选定的选项,加载不同的用户控件作为 StackPanel 的唯一子控件,但是在从已加载的用户控件更新 ListView 时遇到了一些问题。例如:当我保存新项时,需要重新加载 ListView 中的项列表。
2个回答

1

MVVM模式在这里是一个很好的选择。如果您在控件之间传递数据时遇到问题,为什么不在统一的数据层之上引入它们呢?考虑以下内容:

您的菜单中有三个单选按钮,每个单选按钮的IsChecked属性都绑定到相应UserControlVisibility属性。

StackPanel包含所有三个UserControls

ListView绑定到ViewModel的List<Item>

您的每个UserControl都绑定到ListView.SelectedItem:其中一个使用TextBlock进行只读,一个使用TextBox进行编辑。第三个将在您的List<Item>中创建新项目。您需要为每个创建ItemTemplate,或者创建一个UserControl(因为它们看起来非常相似)并使用DataTemplateSelector

如果你对 MVVM 不熟悉,这里 是一个不错的开始。你也可以使用现有的框架之一,比如 MVVM Light


对于一个简单的项目,最好直接使用模式还是使用框架?我不想安装不必要的东西并使我的项目变得复杂。 - rkmax
我会建议你从自己开始,了解关键的东西(DataContext、绑定、命令等),但在某个阶段,你会发现预制的框架可以节省大量时间。 - StaWho
你说得对。我已经安装了MVVM Light,但是文档确实不太好;像这样的教程http://www.galasoft.ch/mvvm/creating/还有很多需要改进的地方。 - rkmax

0

你可以在你的子元素上创建一个事件

public delegate void HandleNAMEOFYOURHANDLEEVENT();

在你的子类中

public event HandleNAMEOFYOURHANDLEEVENT yourInstance;

在子类中使用它

if (!ReferenceEquals(yourInstance, null))
                        {
                            yourInstance();
                        }

你可以像其他事件一样在父级上声明它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接