我正在尝试在wpf中构建一个动态uniformgrid,它将根据控件的宽度更改列数。因此,如果应用程序是全屏,则显示7列,如果应用程序调整为小宽度,则只显示1列。我希望能够容纳那些非常宽的屏幕尺寸,如果用户希望将应用程序关闭到屏幕的一侧。
我正在显示数据的卡片视图,在这种情况下是一些带有肖像图像的通用员工数据。
我对如何解决这个问题的初步想法是将uniformgrid的width属性链接到viewmodel,并将列计数绑定到另一个属性,其中get将是计算列数的函数。但这并不起作用,因为即使使用OneWayToSource模式,绑定也不会以大小属性的方式工作。
我到目前为止找到的解决方案是创建一个自定义的UniformGrid类并覆盖MeasuerOverride方法。它的工作原理除了每次更改屏幕大小时都会运行,这会使应用程序变慢。并且,当您最大化屏幕或将其固定到屏幕的一侧时,它不会被触发。
public class EmployeeUniformGrid : UniformGrid
protected override Size MeasureOverride(Size constraint)
{
Size size = base.MeasureOverride(constraint);
if (size.Width > 1200) this.Columns = 7;
if (size.Width > 400) this.Columns = 2;
return size;
}
}
所以这里真正的问题是,如何使用MVVM(如果可能的话)实现这种功能,并以这样的方式制作,以至于它不会使应用程序变慢这么多?