修改后的列上的Silverlight,datagrid,autogenerated列可更改单元格内容的可见性

时间:2011-05-19 12:08:31

标签: silverlight datagrid datagridtemplatecolumn

我有一个表格,它有一个网格。

我自动生成列并根据需要调整它们:

    if (e.PropertyName == "id")
    {
        System.Windows.Style style = new Style(typeof(DataGridCell));
        style.Setters.Add(new Setter(DataGridCell.ContentTemplateProperty, CreateBtnTemplate(30)));
        e.Column.CellStyle = style;
    }
    private static DataTemplate CreateBtnTemplate(int width)
    {
        string str = "<DataTemplate xmlns='http://schemas.microsoft.com/client/2007' >"
                      //+ "<Button Tag='{Binding id}' Content='Respond'                 
                      + "<Button Tag='{Binding id}' Content='Respond' "
                      + "Visibility='{Binding id,  Converter={StaticResource myConverter}}'"
                      + " />"
                      + "</DataTemplate>";
        return (DataTemplate)XamlReader.Load(str);
    }

在我的网页xaml中,我有:

<Grid x:Name="LayoutRoot" Margin="0,0,4,0">
    <Grid.Resources>
        <my:EnableDisableConverter x:Name="myConverter" x:Key="myConverter"></my:EnableDisableConverter>
    </Grid.Resources>

我的班级看起来像:

public class EnableDisableConverter : IValueConverter
{
    object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Service1failedbackups f = value as Service1failedbackups;
        if (f.resolution == null || f.resolution == "")
            return System.Windows.Visibility.Visible;
        else
            return System.Windows.Visibility.Collapsed;
    }
    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {        return null;
    }
}

简而言之,如果“分辨率”的内容为空白,我想要一个按钮,这样我就可以通过弹出窗口填写。

现在,它全部编译,一切看起来都不错。 (我的定义为

xmlns:my="clr-namespace:SilverlightApplication1"

作为页眉的一部分。

我得到的错误是:

Error: Unhandled Error in Silverlight Application 
Code: 2272    
Category: ParserError       
Message: Cannot find a Resource with the Name/Key myConverter     
File:      
Line: 1     
Position: 121     

现在,一切正常,直到我把btnTemplate的可见性部分放进去。我特意使用了ID列,因为我不需要用户看到它。

请有人告诉我我错过了什么。这让我疯了。

1 个答案:

答案 0 :(得分:1)

我修好了

继承人如何。

在我的xaml文件中我添加了

xmlns:converter="clr-namespace:SilverlightApplication1"

然后在网格下我添加了

    <converter:EnableDisableConverter x:Name="myConverter" x:Key="myConverter" />
    <DataTemplate x:Key="DataTemplate" >
        <Button Visibility='{Binding Converter={StaticResource myConverter}}' Content='Respond' Click="btnRespond_Click" />
    </DataTemplate>
    <DataTemplate x:Key="err" >
        <TextBlock Text='{Binding err}' FontSize='8'  TextWrapping='Wrap'/>
    </DataTemplate>
    <DataTemplate x:Key="resolution" >
        <TextBlock Text='{Binding resolution}' FontSize='8'  TextWrapping='Wrap'/>
    </DataTemplate>
</Grid.Resources>

然后我抛弃了所有自动生成的列并设置了

    <sdk:DataGrid.Columns>
        <sdk:DataGridTemplateColumn  CellTemplate="{StaticResource DataTemplate}" Header="Action" Width="Auto" />
        <sdk:DataGridTextColumn Binding="{Binding server}"  Header="server" Width="Auto" />
        <sdk:DataGridTextColumn Binding="{Binding software}"  Header="software" Width="Auto" />
        <sdk:DataGridTextColumn Binding="{Binding backupgroup}"  Header="backupgroup" Width="Auto" />
        <sdk:DataGridTemplateColumn  CellTemplate="{StaticResource err}" Header="Action" Width="250" />
        <sdk:DataGridTemplateColumn  CellTemplate="{StaticResource resolution}" Header="Action" Width="150" />
        <sdk:DataGridTextColumn Binding="{Binding resolver}"  Header="resolver" Width="Auto" />
    </sdk:DataGrid.Columns>

现在有效。它现在翻转工作.. 欢呼