1. 程式人生 > >整理:WPF中XmlDataProvider的用法總結

整理:WPF中XmlDataProvider的用法總結

一、目的:瞭解XmlDataProvider中繫結資料的方法

二、繫結方式主要有三種:

1、Xaml資源中內建:

        <!--XPath指定一組節點-->
        <XmlDataProvider x:Key="ds1" XPath="XUnits">
            <x:XData>
                <XUnits xmlns="">
                    <FFmpegCommandTextParameter Text="設定紀錄時間" ToolTip="hh:mm:ss[.xxx]格式的記錄時間也支援"  Command="-t" Parameter="2001"/>
                    <FFmpegCommandTextParameter Text="搜尋到指定的時間" ToolTip="[-]hh:mm:ss[.xxx]的格式也支援"  Command="-ss" Parameter="2001"/>
                    <FFmpegCommandTextParameter Text="設定標題" ToolTip="設定標題"  Command="-title" Parameter="2001"/>
                    <FFmpegCommandTextParameter Text="設定作者" ToolTip="設定作者"  Command="-author" Parameter="2001"/>
                    <FFmpegCommandTextParameter Text="設定版權" ToolTip="設定版權"  Command="-copyright" Parameter="2001"/>
                    <FFmpegCommandTextParameter Text="設定評論" ToolTip="設定評論"  Command="-comment" Parameter="2001"/>
                    <FFmpegCommandCheckParameter Text="啟用高質量設定" ToolTip="啟用高質量設定"  Command="-hq" IsChecked="false"/>

                    <FFmpegCommandTextParameter Text="設定目標檔案型別" ToolTip="設定目標檔案型別"  Command="-author" Parameter="2001"/>
                    <FFmpegCommandCheckParameter Text="啟用高質量設定" ToolTip="啟用高質量設定"  Command="-hq" IsChecked="false"/>
                </XUnits>
            </x:XData>
        </XmlDataProvider>

2、Source屬性繫結外部xml檔案

  <XmlDataProvider Source="myfile.xml" x:Key="mykey" XPath="/Root"/>

3、繫結程式碼XmlDocument例項

<XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books" Document="{Binding MyDocument}"/>

三、繫結到控制元件並設定模板

1、繫結樹形結構

       <!--年級模版-->
        <HierarchicalDataTemplate DataType="Grade" ItemsSource="{Binding XPath=Class}">
            <TextBlock Text="{Binding 
[email protected]
}"></TextBlock> </HierarchicalDataTemplate> <!--班級模版--> <HierarchicalDataTemplate DataType="Class" ItemsSource="{Binding XPath=Group}"> <RadioButton Content="{Binding [email protected]}"></RadioButton> </HierarchicalDataTemplate> <!--分組模版--> <HierarchicalDataTemplate DataType="Group"> <CheckBox Content="{Binding
[email protected]
}"></CheckBox> </HierarchicalDataTemplate> <!--資料模版--> <XmlDataProvider x:Key="ds" XPath="Data/Grade"> <x:XData> <Data xmlns=""> <Grade Name="一年級"> <Class Name="甲班"> <Group Name="A組"></Group> <Group Name="B組"></Group> <Group Name="C組"></Group> </Class> <Class Name="乙班"> <Group Name="A組"></Group> <Group Name="B組"></Group> <Group Name="C組"></Group> </Class> </Grade> <Grade Name="二年級"> <Class Name="丙班"> <Group Name="A組"></Group> <Group Name="B組"></Group> <Group Name="C組"></Group> </Class> <Class Name="丁班"> <Group Name="A組"></Group> <Group Name="B組"></Group> <Group Name="C組"></Group> </Class> </Grade> </Data> </x:XData> </XmlDataProvider> <Menu ItemsSource="{Binding Source={StaticResource ds}}"></Menu> <TreeView ItemsSource="{Binding Source={StaticResource ds}}" Margin="5"></TreeView>

2、繫結到ListBox、Comboboxl並設定模板

<!--Xml中的元素名可以作為DataType-->
        <DataTemplate DataType="XUnit">
            <Grid>
                <StackPanel Orientation="Horizontal">
                    <Grid>
                        <Rectangle Fill="Red" Width="{Binding [email protected]}" Stroke="Yellow"></Rectangle>
                        <TextBlock Text="{Binding [email protected]}"/>
                    </Grid>
                    <TextBlock Text="{Binding [email protected]}"></TextBlock>
                </StackPanel>
            </Grid>
        </DataTemplate>
        <!--XPath指定一組節點-->
        <XmlDataProvider x:Key="ds1" XPath="XUnits/XUnit">
            <x:XData>
                <XUnits xmlns="">
                    <XUnit Price="100" Year="2001"></XUnit>
                    <XUnit Price="120" Year="2002"></XUnit>
                    <XUnit Price="140" Year="2003"></XUnit>
                    <XUnit Price="180" Year="2004"></XUnit>
                    <XUnit Price="150" Year="2005"></XUnit>
                    <XUnit Price="200" Year="2006"></XUnit>
                </XUnits>
            </x:XData>
        </XmlDataProvider>

四、設定XPath

1、直接設定型別的XPath對應的屬性

<DataTemplate DataType="FFmpegCommandTextParameter">
            <Grid Width="{Binding RelativeSource={RelativeSource AncestorType=ListBox},Path=ActualWidth}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition Width="2*"/>
                    </Grid.ColumnDefinitions>

                    <TextBlock Text="{Binding [email protected]}" ToolTip="{Binding [email protected]}"/>
                    <TextBox Text="{Binding [email protected]}" ToolTip="{Binding [email protected]}" Grid.Column="1"/>
                </Grid>
            </Grid>
        </DataTemplate>

如:繫結FFmpegCommandTextParameter節點下面Text屬性,注意:@轉義字元必須新增

2、在 XmlDataProvider中設定根節點XPath

<XmlDataProvider Source="myfile.xml" x:Key="myfile" XPath="/Root"/>

3、篩選

<ListBox DataContext="{Binding Source={StaticResource SourceKey},XPath=/Root/Item[@ID/=1]}"/>
<ListBox DataContext="{Binding Source={StaticResource SourceKey},XPath=/Root/Item[4]}"/>
<ListBox DataContext="{Binding Source={StaticResource SourceKey},XPath=/Root/Item[@ID&gt;2]}" />
<ListBox.ItemsSource>
      <Binding Source="{StaticResource InventoryData}"
               XPath="*[@Stock='out'] | *[@Number>=8 or @Number=3]"/>
    </ListBox.ItemsSource>

4、匹配所有型別

    <ListBox ScrollViewer.HorizontalScrollBarVisibility="Hidden">
                    <ListBox.ItemsSource>
                        <Binding Source="{StaticResource ds1}"  XPath="*"/>
                    </ListBox.ItemsSource>
                </ListBox>

五、資料同步到XML

XmlDataProvider xml = this.Resources["xmlData"] as XmlDataProvider;
xml.Document.Save("D:/temp.xml");

 部分程式碼來源於網路

相關推薦

整理WPFXmlDataProvider用法總結

一、目的:瞭解XmlDataProvider中繫結資料的方法 二、繫結方式主要有三種: 1、Xaml資源中內建: <!--XPath指定一組節點--> <XmlDataProvider x:Key="ds1" XPa

ORACLE ROWNUM用法總結!

oracle 分頁查詢語句:select * from (select u.*,rownum r from (select * from userifno) u where rownum<大值) where r>小值 問題: ①為什麼一定要用  u.*?    原因:Or

整理WPF應用附加事件製作可以繫結命令的其他事件

目的:應用附加事件的方式定義可以繫結的事件,如MouseLeftButton、MouseDouble等等 一、定義屬於Control的附加事件ControlAttachEvent類 /// <summary> 附加事件 </summary>

整理CString類的完美總結&&CString 成員函式用法大全&&string 與 CString 轉化&& 和的區別

CString類的完美總結: ①、CString 類物件的初始化: CString str; CString str1(_T("abc")); CString str2 = _T("defg"); TCHAR szBuf[] = _T("kkk"); CStri

總結WPF模板需要繫結父級別的ViewModel該如何處理

<ListBox ItemsSource="{Binding ClassCollection}"> <ListBox.ItemContainerStyle>

c/c++const用法總結

沒有 pan 分配 值類型 變量初始化 _id 多少 部分 參數 1、修飾常量時:   const int temp1; //temp1為常量,不可變   int const temp2; //temp2為常量,不可變 2、修飾指針時:   主要看const在*的前後,

Gitgit-checkout的用法總結(2)

參考 正文 nsa dex block -o onf script 還需要 原帖收藏於IT老兵驛站,傳遞一個IT老兵在雕零前的光和氧。 前言 結合前一篇文章,再認真總結一下git-checkout的用法,因為可能一次總結到不了位,那麽就不怕啰嗦,不怕重復,多總結幾次,這樣可

第十篇javaScript的JSON總結

參考網站:json中國,MDN json 一、必知基礎     JSON 是JavaScript物件文字元號的一個子集,它可以自如的在JavaScript中使用. 看下這個物件: var myJSONObject = {   "b

C++STL用法總結【轉】

(轉自:https://blog.csdn.net/piaoxuezhong/article/details/54348787?utm_source=blogxgwz8) 1.1 什麼是STL? STL(Standard Template Library),即標準模板庫,是一個具有工業強度的

PandasSeries用法總結

Series:帶標籤的陣列 本文對Pandas包中的一維資料型別Series特點及用法進行了總結歸納。 2.1 如何建立Sereis #匯入Pandas包 import pandas as pd #建立Series #1.1.1 通過列表List listSer=pd.Se

NumpyArray用法總結

Numpy中array(陣列) Numpy主要物件是齊次多維陣列,由正整數元組索引,Numpy中維度稱為軸(axis),陣列的維數稱為秩(rank)。 可以參考:Numpy快速入門 1.1 建立陣列 常規方法建立陣列 import numpy as np #一維陣列

PandasDataFrame用法總結

DataFrame:類似於表的資料結構 本文對Pandas包中二維(多維)資料結構DataFrame的特點和用法進行了總結歸納。 可以參考:pandas用法速覽 3.1 增加資料 3.1.1 建立資料框Object Creation import pandas as pd

oracle資料庫總結(七)--ORACLE ROWNUM用法總結! (轉)

來自:http://www.cnblogs.com/chinhr/archive/2007/09/30/911685.html   ORACLE 中ROWNUM用法總結!  對於 Oracle 的 rownum 問題,很多資料都說不支援>,>=,=,betwe

C++CONST用法總結

1、修飾常量時: ? 1 2 const int temp1; //temp1為常量,不可變 int const temp2; //temp2為常量,不可變 2、修飾指標時:   主要看const在*的前後,

git在工作用法總結-環境安裝篇

使用git有很長一段時間了 ,平時用到的時候都是直接google,經常用到的一些也記錄在筆記中,但有時候筆記太多,實在是太亂了(其實是我太懶~ 哈?),找都要半天的時候還不如直接google,今天有空索性將以前的筆記整理一下發在部落格中,便於今後檢視,關於git的使用,這裡我打算分開寫,分為環境安裝篇和

git在工作用法總結-使用篇

上一篇介紹了git的環境安裝配置,本篇對git在工作中常用的用法進行總結,已滿足大部分的日常工作需求,對於其他的一些git命令用法在今後使用到時我也會更新上來,文中如有錯誤,歡迎大家指出來,謝謝~ 一、git本地基礎用法 1、建立程式碼倉庫 git init 2、加入所有目錄到倉庫 git a

ORACLE ROWNUM用法總結!

對於 Oracle 的 rownum 問題,很多資料都說不支援>,>=,=,between...and,只能用以上符號(<、<=、!=),並非說用>,& gt;=,=,between..and 時會提示SQL語法錯誤,而是經常是查不出一條

javathis用法總結

1,當局部變數和成員變數重名的時候,在方法中使用this表示成員變數以示區分。 class Demo{ String str = "這是成員變數"; void fun(String str){ System.out.println(str);

checkbox在vue用法總結

前言 關於checkbox多選框是再常見不過的了,幾乎很多地方都會用到,這兩天在使用vue框架時需要用到checkbox多選功能,實在著實讓我頭疼,vue和原生checkbox用法不太一樣, 之前對於vue中用到過的checkbox也只是別人寫好的元件,這次在自己實現時走了很多坑,特意寫這篇文章記錄下來,給後

Spring@Async用法總結

引言: 在Java應用中,絕大多數情況下都是通過同步的方式來實現互動處理的;但是在處理與第三方系統互動的時候,容易造成響應遲緩的情況,之前大部分都是使用多執行緒來完成此類任務,其實,在Spring 3.x之後,就已經內建了@Async來完美解決這個問題,本文將完成介紹@As