2010-05-19 8 views
3
<UserControl x:Class="SLGridImage.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"> 

    <UserControl.Resources> 
     <local:LevelToVisibilityConverter x:Key="LevelToVisibility" /> 
    </UserControl.Resources> 


    <Grid x:Name="LayoutRoot" Background="White"> 
     <sdk:DataGrid x:Name="dgMarks" CanUserResizeColumns="False" SelectionMode="Single" 
       AutoGenerateColumns="False" 
         VerticalAlignment="Top" 
         ItemsSource="{Binding MarkCollection}" 
         IsReadOnly="True" 
         Margin="13,44,0,0" 
         RowDetailsVisibilityMode="Collapsed" Height="391" 
         HorizontalAlignment="Left" Width="965" 
         VerticalScrollBarVisibility="Visible" > 
      <sdk:DataGrid.Columns> 
       <sdk:DataGridTemplateColumn> 
        <sdk:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Button x:Name="myButton" 
          Click="myButton_Click"> 
           <StackPanel Orientation="Horizontal"> 
            <Image Margin="2, 2, 2, 2" x:Name="imgMarks" Stretch="Fill" Width="12" Height="12" 
              Source="Images/test.png" 
              VerticalAlignment="Center" 
              HorizontalAlignment="Center" 
             Visibility="{Binding Level, Converter={StaticResource LevelToVisibility}}" 
            /> 
            <TextBlock Text="{Binding Level}" TextWrapping="NoWrap" ></TextBlock> 

           </StackPanel> 
          </Button> 
         </DataTemplate> 
        </sdk:DataGridTemplateColumn.CellTemplate> 
       </sdk:DataGridTemplateColumn> 
       <sdk:DataGridTemplateColumn Header="Name" > 
        <sdk:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate > 
          <Border> 
           <TextBlock Text="{Binding Name}" /> 
          </Border> 
         </DataTemplate> 
        </sdk:DataGridTemplateColumn.CellTemplate> 
       </sdk:DataGridTemplateColumn> 

       <sdk:DataGridTemplateColumn Header="Marks" Width="80"> 
        <sdk:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Border> 
           <TextBlock Text="{Binding Marks}" /> 
          </Border> 
         </DataTemplate> 
        </sdk:DataGridTemplateColumn.CellTemplate> 
       </sdk:DataGridTemplateColumn> 
      </sdk:DataGrid.Columns> 
     </sdk:DataGrid> 
    </Grid> 
</UserControl> 

dans .cs:LevelToVisibilityConverter dans Silverlight 4

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using System.Collections.ObjectModel; 
using System.ComponentModel; 

namespace SLGridImage 
{ 
    public partial class MainPage : UserControl 
    { 
     private MarksViewModel model = new MarksViewModel(); 
     public MainPage() 
     { 
      InitializeComponent(); 
      this.DataContext = model; 
     } 

     private void myButton_Click(object sender, RoutedEventArgs e) 
     { 

     } 
    } 

    public class MarksViewModel : INotifyPropertyChanged 
    { 

     public MarksViewModel() 
     { 
      markCollection.Add(new Mark() { Name = "ABC", Marks = 23, Level = 0 }); 
      markCollection.Add(new Mark() { Name = "XYZ", Marks = 67, Level = 1 }); 
      markCollection.Add(new Mark() { Name = "YU", Marks = 56, Level = 0 }); 
      markCollection.Add(new Mark() { Name = "AAA", Marks = 89, Level = 1 }); 
     } 


     private ObservableCollection<Mark> markCollection = new ObservableCollection<Mark>(); 
     public ObservableCollection<Mark> MarkCollection 
     { 
      get { return this.markCollection; } 
      set 
      { 
       this.markCollection = value; 
       OnPropertyChanged("MarkCollection"); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     public void OnPropertyChanged(string propName) 
     { 
      if (PropertyChanged != null) 
       this.PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
     } 
    } 

    public class Mark 
    { 
     public string Name { get; set; } 
     public int Marks { get; set; } 
     public int Level { get; set; } 
    } 

    public class LevelToVisibilityConverter : System.Windows.Data.IValueConverter 
    { 
     #region IValueConverter Members 

     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      Visibility isVisible = Visibility.Collapsed; 
      if ((value == null)) 
       return isVisible; 
      int condition = (int)value; 
      isVisible = condition == 1 ? Visibility.Visible : Visibility.Collapsed; 
      return isVisible; 
     } 

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

     #endregion 
    } 
} 

quand je lance obtenir une erreur sur cette ligne

<UserControl.Resources> 
     <local:LevelToVisibilityConverter x:Key="LevelToVisibility" /> 
    </UserControl.Resources> 

Le type 'local: LevelToVisibilityConverter' n'a pas été trouvé. Vérifiez qu'il ne manque pas de référence d'assembly et que tous les assemblys référencés ont été générés.

Qu'est-ce qu'il me manque ici? Dans l'attente d'une solution, merci.

Répondre

1

Vous devez inclure l'espace de noms Xml de l'espace de noms dans lequel se trouve votre LevelToVisibilityConverter dans votre assemblage.

Supposons que votre LevelToVisibilityConverter est en Namespace SLGridImage vous devez ajouter le XML Namespace (xmlns: locale = "clr-namespace: SLGridImage") comme suit

<UserControl x:Class="SLGridImage.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:local="clr-namespace:SLGridImage" 
    <!-- Rest of the declaration --> 
> 
</UserControl> 
+0

Hmmm ... votre réponse est maintenant beaucoup plus exacte qu'elle ne l'était au moment de la publication. – slugster

+0

@slugster: Oui, après avoir relu la question, j'ai mis à jour ma réponse. – Jehof

1

Ajouter ceci:

xmlns:local="clr-namespace:SLGridImage" 

au début de votre XAML. Utilisez l'intellisense juste au cas où j'ai fait une petite faute de frappe :) Le problème est que vous n'avez pas défini ce namespace/assembly local visé.