2011-11-16 77 views
9

我试图运行this example但我遇到绑定问题。WPF绑定:静态资源无法解析

设计凸显了错误The resource "monthCollection" could not be resolved

如何使用Utility.MonthCollection作为本地资源?

XAML部分:

<Window x:Class="FaceReport.WindowMain" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

Title="Rapor" Height="402" Width="600" WindowState="Normal"> 
<Grid Name="gridMain" x:Uid="uidGridMain"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <ComboBox SelectedIndex="0" 
       DisplayMemberPath="Value" SelectedValuePath="Key" Margin="132,9,200,0" 
       Grid.Row="3" Height="24" VerticalAlignment="Top" Name="cbBind" 

       ItemsSource="{Binding Source={StaticResource Utility.ReportForCollection}, 
       Path=Utility.ReportForCollection}"     
       /> 
</Grid> 
</Window> 

C#部分:

namespace FaceReport 
{ 
internal class Utility 
{ 
    public enum ReportFor 
    { 
     Choose, 
     All, 
     Group, 
     Person 
    } 

    private static Dictionary<ReportFor, string> _dictReportFor; 
    public static Dictionary<ReportFor, string> ReportForCollection 
    { 
     get 
     { 
      return _dictReportFor; 
     } 
    } 

    static Utility() 
    { 
     //initialize the collection with user friendly strings for each enum 
     _dictReportFor = new Dictionary<ReportFor, string>(){ 
      {ReportFor.Choose, "Lütfen seçiniz..."},   
      {ReportFor.All, "Herkes"}, 
      {ReportFor.Group, "Grup"}, 
      {ReportFor.Person, "Şahıs"}}; 
    } 
} 

/// <summary> 
/// Application's main form 
/// </summary> 
public partial class WindowMain : Window 
{ 
    /// <summary> 
    /// Constructor 
    /// </summary> 
    public WindowMain() 
    { 
     InitializeComponent(); 
    } 
} 
+0

请发布代码的相关部分,而不是链接到外部网站或博客。 –

回答

12

你错过此位:

- >此实用程序类实例化作为一种​​资源< - 然后在ComboBox创建中引用 。

它会是这个样子:

<Application.Resources> 
    <local:Utility x:Key="monthCollection"/> 
</Application.Resources> 

该位:{Binding Source={StaticResource monthCollection}, Path=MonthCollection 说找到静态资源monthCollection并在其上使用该属性MonthCollection所以你首先必须实例其中有'对象MonthCollection作为属性,然后引用该静态资源。

你可能还需要一份声明中这样的事情添加到您的文件的顶部:

xmlns:local="clr-namespace:YourNamespaceHere" 
下面

未经测试的代码:

<Window x:Class="FaceReport.WindowMain" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:FaceReport" 

Title="Rapor" Height="402" Width="600" WindowState="Normal"> 

<Application.Resources> 
    <local:Utility x:Key="reportCollection"/> 
</Application.Resources> 

<Grid Name="gridMain" x:Uid="uidGridMain"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <ComboBox SelectedIndex="0" DisplayMemberPath="Value" SelectedValuePath="Key" Margin="132,9,200,0" Grid.Row="3" Height="24" VerticalAlignment="Top" Name="cbBind" 
    ItemsSource="{Binding Source={StaticResource reportCollection}, Path=ReportForCollection}" /> 
</Grid> 
</Window> 
0

请App.xaml中添加一个条目,像下面:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Skins/ControlSkin.xaml"> 
     </ResourceDictionary> 
      <ResourceDictionary Source="/Skins/ListBox.xaml"> 
      </ResourceDictionary> 
     </ResourceDictionary.MergedDicionaries> 
    </ResourceDictionary> 
</Application.Resources>