繁体   English   中英

根据通过 ViewModel 返回的属性设置 DataGridTextColumn 可见性。 遵循 MVVM Caliburn

[英]set the DataGridTextColumn visibilty based on property returned through ViewModel. following MVVM Caliburn

根据通过 ViewModel 返回的属性设置 DataGridTextColumn 可见性。 我在视图中添加了以下代码

xmlns:shared="clr-namespace:IKEA.CountryRange.Local.Shared"
<Window.Resources><shared:VisibilityConverterx:Key="BoolToVisibilityConverter"></shared:VisibilityConverter>
</Window.Resources>

<DataGridTextColumn Header="Price" Width="auto" Visibility="{Binding _ViewPurchasePrices, Converter={StaticResource BoolToVisibilityConverter}}"/>

在共享文件夹中创建一个类

public class VisibilityConverter : IValueConverter
    {

        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            var v = value;

            if (v == "true")
                return "Visible";
            else
                return "Collapsed";

        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion
    }

}

在 ViewModel 中,我绑定了 Property 的布尔值。

但是这段代码没有用。 请就此提出建议。

由于DataGridTextColumn或任何其他受支持的数据网格列不是 datagrid 可视化树的一部分,因此它们不继承 datagrid/windnow 的 DataContext。 因为,它们不在可视化树中,因此任何使用 RelativeSource 获取 DataContext 的尝试都不起作用。

可以创建代理元素来绑定用户控件/窗口的数据上下文; 使用该代理元素绑定 DataGridTextColumn 的可见性。 例如:

 <Grid>
       <Grid.Resources>
           <FrameworkElement x:Key="ProxyElement" DataContext="{Binding}"></FrameworkElement>
       </Grid.Resources>
       <ContentControl Visibility="Collapsed" Content="{StaticResource ProxyElement}"></ContentControl>
       <DataGrid>
           <DataGrid.Columns>
                <DataGridTextColumn Visibility="{Binding Source={StaticResource ProxyElement}, Path=DataContext._ViewPurchasePrices, Converter={StaticResource BoolToVisibilityConverter}}"></DataGridTextColumn>
                </DataGrid.Columns>
       </DataGrid>
    </Grid>
var v = value as bool?; // null if not a boolean

if (v == true)
    return Visibility.Visible;
else
    return Visibility.Collapsed;

为什么不绑定 DataGridTextColumn 的可见性属性? 那你就不需要转换器了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM