none
DataTemplate内のコントロール(ComboBox)のItemsSourceに,コードで定義した配列(static readonly string[])を指定する方法 RRS feed

  • 質問

  • お世話になっています.

    WPF初心者です.

    現在,DataTemplate内に定義したComboBoxのItemsSourceに,コードで定義した配列を指定することが出来ず困っています.

    [XAML/VB/C#] リスト ボックス (ListBox)/コンボ ボックス (ComboBox) に項目を設定するには (WPF)

    を参考に実装しようとしているのですが,DataTemplate内のコントロールを取得できず,設定することが出来ません.

    調べてみたら,DataTemplate内のコントロールは取得できないとのことでした.

    DataGridで、DataTemplate内のコントロールの取得

    Bindingで実装しようと試みたのですが,コンボボックスに表示されません.

    DataTemplate内のComboBoxのItemsSourceに,コードで定義した配列を指定する方法をご教授いただけないでしょうか?

    よろしくお願いいたします。

    <XAML>

      <Window.Resources>
        <local:ConstantSet x:Key="ConstantSet"/>
      </Window.Resources>
          <ListView
            Name="dynamicListView"
            HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch" 
            ItemsSource="{Binding}"
            SelectionMode="Single"
            Grid.Row="1"
            ItemContainerStyle="{DynamicResource myItemContainerStyle}"
            >
            <ListView.Resources>
              <DataTemplate x:Key="TagContentsTemplate">
                <ComboBox x:Name="TagComboBoxinListViewControl" ItemsSource="{Binding Source={StaticResource ConstantSet}, Path=ObjectLevelTag}"/>
              </DataTemplate>
            <ListView.View>
              <GridView>
                <GridViewColumn Header="No." Width="60" DisplayMemberBinding="{Binding Path=rowNumber}"/>
                <GridViewColumn Header="項目" Width="100" CellTemplate="{StaticResource TagContentsTemplate}"/>
              </GridView>
            </ListView.View>
          </ListView>
    

    C#

      class ConstantSet
      {
        public static readonly string[] ObjectLevelTag = 
        {
          "",
          "事実(患者)",
          "事実(医学)",
          "指針",
          "推定",
          "判断",
          "医判",
          "結果",
        };
    

    2011年2月2日 6:03

回答

  • 静的プロパティにバインディングする場合、x:Static マークアップ拡張を使うのが一般的です。

    {Binding Source={x:Static local:ConstantSet.ObjectLevelTag}}

    Binding.Path はインスタンスプロパティを探しにいってしまいます。

    • 回答としてマーク Cocoa.F 2011年2月2日 8:31
    2011年2月2日 7:11

すべての返信

  • 静的プロパティにバインディングする場合、x:Static マークアップ拡張を使うのが一般的です。

    {Binding Source={x:Static local:ConstantSet.ObjectLevelTag}}

    Binding.Path はインスタンスプロパティを探しにいってしまいます。

    • 回答としてマーク Cocoa.F 2011年2月2日 8:31
    2011年2月2日 7:11
  • Hongliangさん,返信ありがとうございます.

    アドバイスいただいた通りに直してみたら,きちんと設定されました.

    静的プロパティにバインディングする場合、x:Static マークアップ拡張を使うのが一般的です。

    Binding.Path はインスタンスプロパティを探しにいってしまいます。

    x:Staticがどのようなもので,いつ使うのか,よくわかっていなかったので,このコメントはとても勉強になりました.

    ありがとうございました.

     

    2011年2月2日 8:30