我是来自Obj-c背景的C#/ WPF新手。我不确定这在面向对象设计方面是如何工作的,以及不同类如何看待彼此。
所以我有一个大视图(MainView),底部有一些自定义绘图和一个数据网格(Datagrid位于其单独的xaml中,后面有.cs文件)。有一个自定义对象被添加到绘图中,当您拖动它时,数据网格会更新(通过使用dataGrid.ScrollIntoView)。 ScrollIntoView的代码位于Datagrid的xaml.cs文件中。
对我而言,这是有道理的,因为MainView具有所有组件并“看到”所有对象,因此当调用dragWindow的事件处理程序时,MainView会请求DataGrid,并调用其方法来更新其列位置。 (这是我理解的方式,如果我错了,请随时纠正我)。
现在我也想走另一条路。因此,如果我水平更新滚动条,那么MainView中的dragwindow将会更新。这对我来说没有多大意义。我可以在datagrid的xaml.cs中创建一个事件处理程序。但它没有看到MainView中的dragWindow对吗?所以我不太确定如何开始实现这个功能。任何帮助总是受到赞赏。谢谢!
答案 0 :(得分:2)
您的网格控件应公开一个事件,以通知任何消费者(在这种情况下为MainView
)滚动已经发生。
public class YourGridControl
{
public event EventHandler GridScrolled;
}
然后, MainView
可以在设计器或代码中为此事件附加处理程序:
gridCtrl.GridScrolled += OnGridScrolled;
private void OnGridScrolled(object sender, EventArgs e)
{
// Logic here
}