silverlight - Mvvm Silverlight,使用绑定(bind)到 SilverLight DataGrid 中的编程样式行

标签 silverlight mvvm datagrid styles mvvm-light

是否可以将 Silverlight DataGrid 中的行绑定(bind)到 ViewModel 中的某种样式属性,以便可以以编程方式/动态应用样式?

我一直在使用 Mvvm-Light 工具包非常成功地创建了一个 mvvm silverlight 应用程序,这是我遇到的第一个主要绊脚石。

提前感谢您的帮助。

最佳答案

Silverlight 中没有数据模板选择器或类型特定的数据模板。解决此问题的一种方法是在您的 ViewModel 中有一个属性来触发 XAML 中某些内容的可见性。例如,在 DataGrid 的项目模板中有一个元素,其中 Visibility 绑定(bind)到 ViewModel 中的 IsSelected 等属性,并使用 BooleanToVisibility 值转换器。

<DataTemplate>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="130" />
            <ColumnDefinition Width="70" />
            <ColumnDefinition Width="70" />
            <ColumnDefinition Width="50" />
        </Grid.ColumnDefinitions>

        <Grid Grid.ColumnSpan="4"
              Visibility="{Binding Path=IsSelected, Converter={StaticResource BoolToVisibilityConverter}}">
            <Border Style="{StaticResource SelectedDataGridRowStyle}" />
        </Grid>
        <!-- other stuff here -->
    </Grid>
</DataTemplate>

如果您还没有定义自己的 Boolean to Visbility 值转换器...
public class BoolToVisibilityConverter : System.Windows.Data.IValueConverter
{
    public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var visible = true;
        if (value != null && value is bool)
            visible = (bool)value;

        var reverse = false;
        if (parameter != null)
            reverse = System.Boolean.Parse((string)parameter);

        visible = reverse ? !visible : visible;

        return visible ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
    }

    public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var visibility = System.Windows.Visibility.Visible;
        if (value != null && value is System.Windows.Visibility)
            visibility = (System.Windows.Visibility)value;

        var reverse = false;
        if (parameter != null && parameter is bool)
            reverse = (bool)parameter;

        var visible = visibility == System.Windows.Visibility.Visible;

        visible = reverse ? !visible : visible;

        return visible;
    }
}

关于silverlight - Mvvm Silverlight,使用绑定(bind)到 SilverLight DataGrid 中的编程样式行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3161528/

相关文章:

silverlight - Silverilight 中的语言解析器

c# - Silverlight 页面登录/重定向/导航

Silverlight:以编程方式绑定(bind)控件属性

wpf - 如何从DataGridColumn获取DataGridColumnHeader?

c# - 根据 c# windows 中另一列的值对 datagrid 中的列值求和

html - silverlight 应用程序的浏览器滚动条问题。(Html)

c# - 从 silverlight 应用程序访问 SQL Server 数据库

wpf - WPF 中的文本框绑定(bind)

c# - MVVM View 仅在 View 模型的构造函数中设置数据时更新

c# - 数据网格单元格单击事件