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

詳解WPF中值轉換器的使用方法

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

什么是值轉換器

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

使用值轉換器的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)建一個轉換器類:

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介紹

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

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

該接口有兩個方法ConvertConvertBack。

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

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

參數(shù)類型含義
valueobject綁定源生成的值。
targetTypeType綁定目標屬性的類型。
parameterobject要使用的轉換器參數(shù)。
cultureCultureInfo要用在轉換器中的區(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)建轉換器。 該方法應返回一個對象,該對象的類型與綁定所面向的依賴屬性的類型相同,或者至少返回一個可隱式強制轉換或轉換為目標類型的類型。

再結合這段代碼:

 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ù)目標類型的不同,進行不同的轉換。

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

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

結果如下圖所示:

Demo代碼來源

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

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

相關文章

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

    C#中的多線程小試牛刀

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

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

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

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

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

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

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

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

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

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

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

    C#進階系列 WebApi身份認證解決方案推薦:Basic基礎認證

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

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

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

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

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

    C#集合之自定義集合類

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

最新評論

克拉玛依市| 阿巴嘎旗| 顺义区| 天津市| 石家庄市| 延吉市| 揭西县| 小金县| 金秀| 崇阳县| 隆尧县| 镇康县| 信丰县| 乐安县| 汉源县| 郸城县| 定远县| 嘉义县| 舟曲县| 册亨县| 鱼台县| 淳化县| 曲松县| 读书| 鸡西市| 平果县| 乌审旗| 垦利县| 固始县| 宁远县| 射洪县| 墨脱县| 三河市| 綦江县| 安徽省| 开封市| 中超| 上蔡县| 开封县| 孙吴县| 绥滨县|