読者です 読者をやめる 読者になる 読者になる

初めての WPF デスクトップ アプリケーション

初めてのWPF

MSから公開されいているこのチュートリアルをやってみましょう!
チュートリアル: 初めての WPF デスクトップ アプリケーション

何かがおかしい

最後までやってみましたか?
ListBoxには何も表示されないですよね?
実はこのチュートリアル間違ってます。


間違ってるのはここの
f:id:takashima0411:20160803095202p:plain

コレ

<Grid.Resources>
    <!-- Expense Report Data -->
    <XmlDataProvider x:Key="ExpenseDataSource" XPath="Expenses">
        <x:XData>
            <Expenses>
                <Person Name="Mike" Department="Legal">
                    <Expense ExpenseType="Lunch" ExpenseAmount="50" />
                    <Expense ExpenseType="Transportation" ExpenseAmount="50" />
                </Person>
                <Person Name="Lisa" Department="Marketing">
                    <Expense ExpenseType="Document printing" ExpenseAmount="50"/>
                    <Expense ExpenseType="Gift" ExpenseAmount="125" />
                </Person>
                <Person Name="John" Department="Engineering">
                    <Expense ExpenseType="Magazine subscription" ExpenseAmount="50"/>
                    <Expense ExpenseType="New machine" ExpenseAmount="600" />
                    <Expense ExpenseType="Software" ExpenseAmount="500" />
                </Person>
                <Person Name="Mary" Department="Finance">
                    <Expense ExpenseType="Dinner" ExpenseAmount="100" />
                </Person>
            </Expenses>
        </x:XData>
    </XmlDataProvider>
</Grid.Resources>

ではコレのなにが間違っているのでしょうか?
こいつです。

<Expenses>
...
</Expenses>

こうでなくてはなりません。

<Expenses xmlns="">
...
</Expenses>

この「xmlns=""」がとても大事です。
詳しくはこの辺。
x:XData XAML ディレクティブ要素
Binding.XPath プロパティ (System.Windows.Data)


「xmlns=""」がないと名前空間をSystem.Windowsから継承してしまいXPathが意図した動きをしないということですね。
チュートリアルに動かないものをのせるのはいかがなものかと思います。

ちなみにこれこっちの記事だとちゃんと直ってます。
https://msdn.microsoft.com/en-us/library/ms752299(v=vs.110).aspx

日本語のチュートリアルには未反映なのでコレからWPF触る人は気をつけてください。