2014-02-04 9 views
0

Я создаю несколько статических ресурсов, которые я хочу добавить в ObjectDataProvider, но я не могу понять синтаксис.Синтаксис для добавления статических ресурсов в ObjectDataProvider

<Window.Resources> 

    <SolidColorBrush x:Key="SolidFillBrush" Color="Black" Opacity="1.0" /> 
    <SolidColorBrush x:Key="HalfOpaqueBrush" Color="Black" Opacity="0.5" /> 
    <SolidColorBrush x:Key="QuarterOpaqueBrush" Color="Black" Opacity="0.25" /> 
    <SolidColorBrush x:Key="TransparentBrush" Color="Black" Opacity="0" /> 

    <ObjectDataProvider x:Key="AllFillStyles" ObjectType="{x:Type Brush}" MethodName="???"> 
     <!-- add the static resources here, but how? --> 
    </ObjectDataProvider> 

</Window.Resources> 

Любые предложения?

Редактировать: Я пытался создать ComboBox, содержащий вышеуказанные кисти, чтобы пользователь мог выбрать, какую кисть использовать в качестве стиля заливки для сетки (вроде как в Excel, где вы можете выбрать стиль заливки и цвет .) Мне нужно было установить ItemsSource и найти, где кто-то использовал ObjectDataProvider. Я понял, что вы можете создать массив в xaml и заполнить его кистями, а затем использовать их вместо этого.

ответ

0

Образец один о том, как использовать ObjectDataProvider. MethodName это имя метода, он будет пытаться вызвать при получении элементов

в вашем XAML файле

<ObjectDataProvider x:Key="objDs" 
          ObjectType="{x:Type data:CDataAccess}" 
          MethodName="GetEmployees"> 
</ObjectDataProvider> 

И ваш файл класса

public class CDataAccess 
{ 
    ObservableCollection<ImageEmployee> _EmpCollection; 

    public ObservableCollection<ImageEmployee> EmpCollection 
    { 
     get { return _EmpCollection; } 
     set { _EmpCollection = value; } 
    } 

    public CDataAccess() 
    { 
     _EmpCollection = new ObservableCollection<ImageEmployee>(); 
    } 

    public ObservableCollection<ImageEmployee> GetEmployees() 
    { 
     SqlConnection conn = 
     new SqlConnection("Data Source=.;Initial Catalog=Company;" + 
          "Integrated Security=SSPI"); 
     SqlCommand cmd = new SqlCommand(); 
     conn.Open(); 
     cmd.Connection = conn; 
     cmd.CommandText = "Select * from ImageEmployee"; 

     SqlDataReader reader = cmd.ExecuteReader(); 
     while (reader.Read()) 
     { 
      EmpCollection.Add(
       new ImageEmployee() 
       { 
        EmpNo = Convert.ToInt32(reader["EmpNo"]), 
        EmpName = reader["EmpName"].ToString(), 
        Salary = Convert.ToInt32(reader["Salary"]), 
        DeptNo = Convert.ToInt32(reader["DeptNo"]), 
        EmpImage = (byte[])reader["EmpImage"] 
       }); 
     } 
     reader.Close(); 
     conn.Close(); 
     return EmpCollection; 
    } 
} 

Если ваш MethodName имеет параметр, вы можете добавить это к своему провайдеру объектов ресурса

<ObjectDataProvider.MethodParameters> 
       <s:String>Parameter1</s:String> 
</ObjectDataProvider.MethodParameters> 

и убедитесь, что ваши типы параметров соответствуют ему.

0

Я не знаю, какова реальная цель с ObjectDataProvider.

Если вы хотите вызвать какой-то метод на объекте AllFillStyle с другим параметром, который идентифицирует ключ ресурса (объект SolidColorBrush).

Например:

  • AllFileStyle.GetBrush ("SolidFillBrush")
  • AllFileStyle.GetBrush ("HalfOpaqueBrush")
  • и т.д.

это не так просто, потому что будет need pass paramater dynamically to ObjectDataProvider.

Если вам нужна только группа, то resorces type SolidColorBrush и использовать в XAML.

Вы можете заполнить все типы ресурсов SolidColorBrush в коде.

private ObservableCollection<SolidColorBrush> _windowBrushes; 

public ObservableCollection<SolidColorBrush> WindowBrushes 
{ 
    get 
    { 
     return _windowBrushes; 
    } 

    set 
    { 
     _windowBrushes = value; 
     OnPropertyChanged("WindowBrushes"); 
    } 
} 


private void MainWindow_OnLoaded(object sender, RoutedEventArgs e) 
{ 
    WindowBrushes = new ObservableCollection<SolidColorBrush>(); 

    foreach (var resource in this.Resources.Values) 
    { 
     SolidColorBrush brush = resource as SolidColorBrush; 

     if (brush!=null) 
     { 
      WindowBrushes.Add(brush); 
     } 
    } 
} 

А затем использовать в XAML.

<ListBox x:Name="ListBoxBrushes" 
     Grid.Row="0" 
     Margin="5" 
     ItemsSource="{Binding Path=WindowBrushes, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <Ellipse Width="30" 
         Height="30" 
         Stroke="Black" 
         StrokeThickness="1" 
         Fill="{Binding}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

<Rectangle Grid.Row="1" 
      Margin="5" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" 
      Fill="{Binding ElementName=ListBoxBrushes, Path=SelectedItem}"/> 

Не могли бы вы указать свой сценарий с помощью ObjectDataProvider?

Thank

 Смежные вопросы

  • Нет связанных вопросов^_^