UWP開發中Binding配合Converter的使用
UWP開發中Binding配合Converter的使用
MVVM模式的使用,簡化了UWP應用的開發,使層次更加分明。在寫xaml的時候,有些小技術還是很實用的;比如Converter,字面上理解是轉換器,那它到底是轉換什麼的?接觸過的可能知道它起的是型別轉換的作用,當你繫結的資料是一堆字母,顯示時卻想將它變成漢字,一種做法可以在資料繫結前將這些資料轉換成需要的文字,另一種做法就是使用Converter。
它有兩個好處:
1,保持原始資料的完整性,不破壞原有資料結構。
2,可以複用,別的地方需要直接將這個Converter拿過去就行。
先展示xaml程式碼,簡單的一個例子,資料來源給的是uint型別的數字,頁面展示將它超過10000用字母w表示,並保留2位小數顯示。Converter是一個.CS檔案,在頁面的資源中宣告後才可以使用,可以在page標籤下宣告。也可以在需要繫結資料的上一級父級宣告,下面我就是直接再上級Grid中宣告的。
...
xmlns:converter="using:TikTokBillboard.Model"
...
<Grid Grid.Row="2">
<Grid.RowDefinitions>
<RowDefinition Height="3*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.Resources>
<ResourceDictionary>
<converter:UnitConverter x:Key="Unit"/>
</ResourceDictionary>
</Grid.Resources>
<Grid x:Name="Digg" Grid.Row="0" Tapped="Digg_Tapped" HorizontalAlignment="Center" VerticalAlignment="Center">
<!--未點贊前為白色-->
<TextBlock Text="" Foreground="{Binding DiggColor,Mode=TwoWay}" FontFamily="Segoe MDL2 Assets" FontSize="24" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<TextBlock Grid.Row="1" Text="{Binding DiggNum,Converter={StaticResource Unit}}" Grid.RowSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
先引用CS檔案,xmlns:converter="using:TikTokBillboard.Model",然後宣告UnitConverter(這個是我的Converter檔案的名稱),x:key的值的可以隨便寫,只要和下面使用時相同即可。
DiggNum是目標源,我們就是要把DiggNum的值轉化成簡寫w表示。
View Code
Converter的實現需要繼承IValueConverter介面,這個介面是系統的,我們要實現的是兩個方法Convert和ConvertBack。Convert方法是將資料來源繫結的值傳給該方法進行轉換處理,ConvertBack則是將頁面展示的值傳給資料來源時進行的轉換處理,一般情況只使用Convert方法。這兩個方法有相同的四個引數,value是資料來源繫結傳過來的值,targetType不用管它,parameter是轉換引數用於根據一個值不能進行明確轉換使用的,language就是語言,根據語言不同轉換成不同形態可以使用。
namespace TikTokBillboard.Model
{
/// <summary>
/// 單位轉換
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public class UnitConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
//預設為0
string size = "0";
//非0判斷
if (uint.Parse(value.ToString()) != 0 && uint.Parse(value.ToString()) >= 10000)
{
size = String.Format("{0:F2} {1}", Math.Round((1.00 * uint.Parse(value.ToString()) / 10000), 2), "w");
}
else
{
size = value.ToString();
}
return size;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
}
View Code
剩餘的程式碼部分就是根據MVVM隨便寫一下,新增個Model和ViewModel。
最後看一下實現效果:
文章參考 https://blog.csdn.net/weixin_30585437/article/details/98146909
相關文章
- Android開發教程 - 使用Data Binding(三)在Activity中的使用Android
- Android開發教程 - 使用Data Binding(四)在Fragment中的使用AndroidFragment
- Android開發教程 - 使用Data Binding(八)使用自定義InterfaceAndroid
- win10 配合 phpstorm 使用 docker 開發Win10PHPORMDocker
- Android開發教程 - 使用Data Binding(五)資料繫結Android
- vscode 配合wsl做linux下的開發VSCodeLinux
- Android開發教程 - 使用Data Binding(七)使用BindingAdapter簡化圖片載入AndroidAPT
- with 和 whereHas 的配合使用
- 專案中如何配合VScode使用EslintVSCodeEsLint
- UWP 開發初階 Chapter 15 - UWP 軟體打包與上傳發布到應用商店的簡單流程介紹APT
- Laravel 配合 jwt 使用LaravelJWT
- sqlmap使用,配合BurpsuiteSQLUI
- 【轉載】WPF中Binding使用StringFormat格式化字串方法ORM字串
- UWP開發入門(25)——通過Radio控制Bluetooth, WiFiWiFi
- Android開發教程 - 使用Data Binding Android Studio不能正常生成相關類/方法的解決辦法Android
- hubilder如何入後臺java配合開發webapp?JavaWebAPP
- Protobuf協議 Java & Js的配合使用協議JavaJS
- [譯] Data Binding 庫使用的經驗教訓
- 2020年的UWP(4)——UWP和等待Request的Desktop Extension
- jquery中siblings方法配合什麼方法一起使用jQuery
- ajax配合art-template模板引擎的使用
- 2020年的UWP(3)——UWP和desktop extension的簡單互動
- 2020年的UWP(5)——UWP和Desktop Extension的雙向互動
- 實用 | 利用 aardio 配合 Python 快速開發桌面應用Python
- Android開發教程-使用DataBinding(六)RecyclerViewAdapter中的使用AndroidViewAPT
- 中國軟體出口十強企業的背後:科學的管理配合高效能的開發工具
- 關於iOS開發中copy的使用iOS
- 聊聊 Interface 在 Laravel 開發中的使用Laravel
- 微軟正式“封殺” UWP:建議開發者轉向 Windows APP SDK 作為 APP 開發的未來微軟WindowsAPP
- GraphQL 配合 JWT 使用 —— Laravel RSS (二)JWTLaravel
- 2021年的UWP(6)——長生命週期Desktop Extension向UWP的反向通知
- python中安裝配置pyspark庫教程需要配合spark+hadoop使用PythonSparkHadoop
- Wireshark在多媒體開發中的使用
- 使用 Nocalhost 開發 Kubernetes 中的 APISIX Ingress ControllerAPIController
- 微軟把UWP定位成業務線應用程式開發平臺微軟
- 使用Haproxy與nginx配合搭建web群集NginxWeb
- fail2ban配合cloudflare cdn使用AICloud
- UWP 取消GridView、ListView滑鼠選中、懸停效果View