Silverlight, datagrid, автоматически созданные столбцы в измененном столбце изменяют видимость содержимого ячейки

#silverlight #datagrid #datagridtemplatecolumn

#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;
    }
}
  

Короче говоря, если содержимое «разрешение» пустое, мне нужна кнопка, чтобы я мог заполнить ее через всплывающее окно.

Теперь все это компилируется, все выглядит хорошо. (my определяется как

 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:

Я исправил это

Вот как.

в моем файле 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>
  

ТЕПЕРЬ это работает. ТЕПЕРЬ работает переключение..
ура