最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解WPF中值轉(zhuǎn)換器的使用方法

 更新時間:2024年02月11日 08:38:34   作者:Dm_dotnet  
在WPF(Windows Presentation Foundation)中,值轉(zhuǎn)換器(Value Converter)是一種機制,允許你在綁定時轉(zhuǎn)換綁定源和綁定目標(biāo)之間的值,本文給大家介紹了WPF中值轉(zhuǎn)換器的使用方法,需要的朋友可以參考下

什么是值轉(zhuǎn)換器

在WPF(Windows Presentation Foundation)中,值轉(zhuǎn)換器(Value Converter)是一種機制,允許你在綁定時轉(zhuǎn)換綁定源和綁定目標(biāo)之間的值。值轉(zhuǎn)換器實現(xiàn)了 IValueConverter 接口,該接口包含兩個方法:ConvertConvertBack。這兩個方法分別用于在綁定源到目標(biāo)時進(jìn)行值轉(zhuǎn)換,以及在目標(biāo)到源時進(jìn)行值轉(zhuǎn)換。

使用值轉(zhuǎn)換器的Demo

首先創(chuàng)建一個綁定數(shù)據(jù)源類:

using System;
using System.ComponentModel;
?
namespace BindConversion
{
    public class MyData : INotifyPropertyChanged
    {
        private DateTime _thedate;
?
        public MyData()
        {
            _thedate = DateTime.Now;
        }
?
        public DateTime TheDate
        {
            get { return _thedate; }
            set
            {
                _thedate = value;
                OnPropertyChanged("TheDate");
            }
        }
?
        // Declare event
        public event PropertyChangedEventHandler PropertyChanged;
        // OnPropertyChanged method to update property value in binding
        private void OnPropertyChanged(string info)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
        }
    }
}

有一個類型為DateTime的屬性TheDate,該類實現(xiàn)了INotifyPropertyChanged接口。

再創(chuàng)建一個轉(zhuǎn)換器類:

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
?
namespace BindConversion
{
    public class MyConverter : IValueConverter
    {
        public object Convert(object o, Type type,
            object parameter, CultureInfo culture)
        {
            var date = (DateTime) o;
            switch (type.Name)
            {
                case "String":
                    return date.ToString("F", culture);
                case "Brush":
                    return Brushes.Red;
                default:
                    return o;
            }
        }
?
        public object ConvertBack(object o, Type type,
            object parameter, CultureInfo culture) => null;
    }
}

該類實現(xiàn)了IValueConverter接口。

IValueConverter介紹

如果要將值轉(zhuǎn)換器與綁定相關(guān)聯(lián),請創(chuàng)建實現(xiàn) 接口的 IValueConverter 類, Convert 然后實現(xiàn) 和 ConvertBack 方法。 轉(zhuǎn)換器可以將數(shù)據(jù)從一種類型更改為另一種類型,根據(jù)文化信息轉(zhuǎn)換數(shù)據(jù),或修改演示文稿的其他方面。

值轉(zhuǎn)換器具有區(qū)域性感知能力。 ConvertConvertBack 方法都有一個culture參數(shù),用于指示區(qū)域性信息。 如果區(qū)域性信息與轉(zhuǎn)換無關(guān),則可以在自定義轉(zhuǎn)換器中忽略該參數(shù)。

該接口有兩個方法ConvertConvertBack。

public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture);

中各參數(shù)的含義如下所示:

參數(shù)類型含義
valueobject綁定源生成的值。
targetTypeType綁定目標(biāo)屬性的類型。
parameterobject要使用的轉(zhuǎn)換器參數(shù)。
cultureCultureInfo要用在轉(zhuǎn)換器中的區(qū)域性。

再看一下MainWindow.xaml:

<Window x:Class="BindConversion.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:BindConversion"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel Width="300" Height="300" Name="Page1">
        <StackPanel.Resources>
            <local:MyData x:Key="MyDataSource"/>
            <local:MyConverter x:Key="MyConverterReference"/>
            <Style TargetType="TextBlock">
                <Setter Property="FontSize" Value="15"/>
                <Setter Property="Margin" Value="3"/>
            </Style>
        </StackPanel.Resources>
?
        <StackPanel.DataContext>
            <Binding Source="{StaticResource MyDataSource}"/>
        </StackPanel.DataContext>
?
        <TextBlock Text="Unconverted data:"/>
        <TextBlock Text="{Binding Path=TheDate}"/>
        <TextBlock Text="Converted data:"/>
        <TextBlock Name="myconvertedtext"
    Foreground="{Binding Path=TheDate,
                         Converter={StaticResource MyConverterReference}}">
            <TextBlock.Text>
                <Binding Path="TheDate"
               Converter="{StaticResource MyConverterReference}"/>
            </TextBlock.Text>
        </TextBlock>
?
    </StackPanel>
</Window>

首先定義了資源:

  <StackPanel.Resources>
            <local:MyData x:Key="MyDataSource"/>
            <local:MyConverter x:Key="MyConverterReference"/>
            <Style TargetType="TextBlock">
                <Setter Property="FontSize" Value="15"/>
                <Setter Property="Margin" Value="3"/>
            </Style>
  </StackPanel.Resources>

一個名為MyDataSource類型為MyData的資源與一個名為MyConverterReference類型為MyConverter的資源。

我們發(fā)現(xiàn)有三處地方用到了Binding

  <Binding Source="{StaticResource MyDataSource}"/>

這種形式我們已經(jīng)見過了。

  <TextBlock Name="myconvertedtext"
    Foreground="{Binding Path=TheDate,
                         Converter={StaticResource MyConverterReference}}">
  <Binding Path="TheDate"
               Converter="{StaticResource MyConverterReference}"/>

注意,這兩處Binding中都出現(xiàn)了Converter

Converter介紹

通過實現(xiàn) IValueConverter 接口并實現(xiàn) Convert 方法創(chuàng)建轉(zhuǎn)換器。 該方法應(yīng)返回一個對象,該對象的類型與綁定所面向的依賴屬性的類型相同,或者至少返回一個可隱式強制轉(zhuǎn)換或轉(zhuǎn)換為目標(biāo)類型的類型。

再結(jié)合這段代碼:

 public object Convert(object o, Type type,
     object parameter, CultureInfo culture)
 {
     var date = (DateTime) o;
     switch (type.Name)
     {
         case "String":
             return date.ToString("F", culture);
         case "Brush":
             return Brushes.Red;
         default:
             return o;
     }
 }

根據(jù)目標(biāo)類型的不同,進(jìn)行不同的轉(zhuǎn)換。

TextBlock.Foreground的類型為Brush就返回Brushes.Red。

TextBlock.Text的類型為String就返回date.ToString("F", culture)

結(jié)果如下圖所示:

Demo代碼來源

https://github.com/microsoft/WPF-Samples/tree/main/Data%20Binding/BindConversion

以上就是詳解WPF中值轉(zhuǎn)換器的使用方法的詳細(xì)內(nèi)容,更多關(guān)于WPF轉(zhuǎn)換器使用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#中的多線程小試牛刀

    C#中的多線程小試牛刀

    這篇文章主要給大家介紹了關(guān)于C#中多線程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 解析在內(nèi)部循環(huán)中Continue外部循環(huán)的使用詳解

    解析在內(nèi)部循環(huán)中Continue外部循環(huán)的使用詳解

    本篇文章是對在內(nèi)部循環(huán)中Continue外部循環(huán)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 使用C#改善代碼質(zhì)量的技巧和實踐

    使用C#改善代碼質(zhì)量的技巧和實踐

    本文將通過多個編程技巧和實踐,展示如何顯著改善代碼質(zhì)量,以 C# 為例,結(jié)合 衛(wèi)語句、枚舉、字典映射、單一職責(zé)原則 等技巧,逐步優(yōu)化代碼,感興趣的小伙伴跟著小編一起來看看吧
    2025-03-03
  • C#使用Thrift作為RPC框架入門詳細(xì)教程

    C#使用Thrift作為RPC框架入門詳細(xì)教程

    這篇文件我們講了從0到1使用thrift框架的方法,也講了一些該框架的基本知識,本文將詳細(xì)介紹 Thrift 在C#語言下的使用方式,并且提供豐富的實例代碼加以解釋說明,幫助使用者快速構(gòu)建服務(wù),感興趣的朋友一起看看吧
    2021-11-11
  • 深入淺析C#中單點登錄的原理和使用

    深入淺析C#中單點登錄的原理和使用

    這篇文章主要介紹了C#中單點登錄的原理和使用,需要的朋友可以參考下
    2017-10-10
  • C#操作本地文件及保存文件到數(shù)據(jù)庫的基本方法總結(jié)

    C#操作本地文件及保存文件到數(shù)據(jù)庫的基本方法總結(jié)

    C#使用System.IO中的文件操作方法在Windows系統(tǒng)中處理本地文件相當(dāng)順手,這里我們還總結(jié)了在Oracle中保存文件的方法,嗯,接下來就來看看整理的C#操作本地文件及保存文件到數(shù)據(jù)庫的基本方法總結(jié)
    2016-05-05
  • C#進(jìn)階系列 WebApi身份認(rèn)證解決方案推薦:Basic基礎(chǔ)認(rèn)證

    C#進(jìn)階系列 WebApi身份認(rèn)證解決方案推薦:Basic基礎(chǔ)認(rèn)證

    下面小編就為大家?guī)硪黄狢#進(jìn)階系列 WebApi身份認(rèn)證解決方案推薦:Basic基礎(chǔ)認(rèn)證。小編覺得挺不錯的,現(xiàn)在分享給大家。給大家一個參考。一起跟隨小編過來看看吧
    2016-03-03
  • c# 實現(xiàn)觀察者模式

    c# 實現(xiàn)觀察者模式

    這篇文章主要介紹了c# 實現(xiàn)觀察者模式的步驟,幫助大家更好的理解和使用c#實現(xiàn)設(shè)計模式,感興趣的朋友可以了解下
    2021-01-01
  • C#實現(xiàn)以管理員方式啟動程序的多種方法

    C#實現(xiàn)以管理員方式啟動程序的多種方法

    在Windows應(yīng)用程序開發(fā)的領(lǐng)域中,C#語言憑借其強大的功能和廣泛的適用性,被眾多開發(fā)者所青睞,然而,在實際的開發(fā)過程里,我們常常會遭遇程序需要訪問特定的系統(tǒng)資源,像是系統(tǒng)文件夾、注冊表項等,在接下來的內(nèi)容中,我將為大家介紹在C#中實現(xiàn)以管理員方式啟動程序的多種方法
    2025-01-01
  • C#集合之自定義集合類

    C#集合之自定義集合類

    這篇文章介紹了C#集合之自定義集合類,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05

最新評論

凌云县| 海伦市| 富锦市| 乐昌市| 如皋市| 许昌县| 满洲里市| 威信县| 吉首市| 原平市| 探索| 泾阳县| 南丹县| 历史| 日土县| 贡觉县| 通州区| 清远市| 白朗县| 扬中市| 格尔木市| 电白县| 黄浦区| 曲麻莱县| 乌恰县| 马鞍山市| 海林市| 长丰县| 开远市| 大名县| 革吉县| 通江县| 南乐县| 南昌县| 沙坪坝区| 古蔺县| 林州市| 洛阳市| 云浮市| 闽侯县| 苗栗县|