我正在创建几个想要添加到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中创建一个数组,并用笔刷填充它,然后使用它。
发布于 2014-02-05 05:07:16
一个关于如何使用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>并确保您的参数类型与其匹配。
发布于 2014-02-05 06:54:38
我不知道你对ObjectDataProvider的真正目的是什么。
如果您想使用标识资源键(SolidColorBrush对象)不同参数来调用对象AllFillStyle上的某些方法。
例如:
这并不容易,因为will need pass paramater dynamically to ObjectDataProvider。
如果您只需要对所有资源进行分组,则类型为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的场景吗?
谢谢
https://stackoverflow.com/questions/21562200
复制相似问题