首页 > 解决方案 > 隐藏/显示 GridViewColumn

问题描述

默认情况下,我想隐藏一个 GridViewColumn,然后在视图模型确定的某些情况下,显示它。现在,我直接将列宽绑定到视图模型。

<ListView  BorderBrush="DarkSlateGray" BorderThickness="1"
         ScrollViewer.HorizontalScrollBarVisibility="Disabled"
         ItemsSource="{Binding SubVMs}"
>
    <ListView.View>
        <GridView>
            <!-- other columns here -->
            <GridViewColumn Width="{Binding BslColumnWidth}" Header="BSL">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <!-- content here -->
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

在我的视图模型中,我将其简化为驱动该宽度的布尔属性:

public int BslColumnWidth { get; private set; } = 0;
private bool BslColumnEnabled
{
    set
    {
        int temp = value ? 60 : 0;
        if (temp != BslColumnWidth)
        {
            BslColumnWidth = temp;
            NotifyPropertyChanged(nameof(BslColumnWidth));
        }
    }
}

...但同样,我将像素宽度硬编码到我的视图模型中,这打破了 MVVM 设计模式。有没有一种无需直接绑定视图模型中的宽度属性即可将该信息推送到视图的好方法?

标签: c#wpfmvvm

解决方案


推荐阅读