Blog chia sẽ kinh nghiệm lập trình và Technical VN. Nơi mà các bạn có thể học tập và tham khảo về những công nghệ mới nhất hiện nay về .NET
Thứ Hai, 15 tháng 12, 2014
On 13:52 by Tuan Pham in Binding, Chuyên Đề WPF, Chuyển đổi dữ liệu, ValueConverter, WPF, WPF Căn Bản No comments
Hôm nay chúng ta sẽ tìm hiểu về cách thức để chuyển đổi một kiểu dữ liệu bất kỳ từ sourceValue thành kiểu dữ liệu mà Control hiện tại có thể hiểu. Tình huống chúng ta có thể gặp là làm sao chuyển một kiểu Boolean thành kiểu Visibility để hiện hoặc ẩn Control.
Để làm điều này chúng ta cần tạo một class Converter và class này kế thừa từ interface IValueConverter, interface này có hai thành viên:
Convert: Chuyển đổi từ sourceValue thành kiểu trên Control nhận value
ConvertBack: Chuyển đổi từ Control binding sang kiểu dữ liệu nguồn
[code language="csharp"]
public class Converter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
[/code]
Chúng ta sẽ Implement hai phương thức thành viên trên như sau:
[code language="csharp"]
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var bValue = (bool)value;
if (bValue)
return Visibility.Visible;
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var visibility = (Visibility)value;
if (visibility == Visibility.Visible)
return true;
return false;
}
[/code]
Đến đây chúng ta đã xong phần quang trọng nhất, vậy để dùng nó khi dữ liệu được Binding thế nào, trước tiên ta phải khai báo namespace chứa class trên.
[code language="xml"]
xmlns:local="clr-namespace:DataBinding"
[/code]
Và define class Converter ở Resources với khóa là x:Key="BooleanConvert"
[code language="xml"]
<Window.Resources>
<local:Converter x:Key="BooleanConvert" />
</Window.Resources>
[/code]
Việc tiếp theo khá đơn giản, tôi tạo một CheckBox với mục đích để ẩn hoặc hiện một Rectangle, dĩ nhiên tôi sẽ Binding thuộc tính Visibility của Rectangle với thuộc tính IsChecked của CheckBox. Nếu không dùng Converter thì việc Binding này sẽ không mang lại kết quả như mong đợi. Sau đây thôi sẽ sử dụng Convert trong code XAML:
[code language="xml"]
<StackPanel Margin="30">
<CheckBox x:Name="checkBox" Margin="10" Content="Show Rectangle" IsChecked="True"></CheckBox>
<Rectangle Fill="#FF158B0A" Height="200" RadiusY="43" RadiusX="43"
UpdateSourceTrigger=PropertyChanged,Converter='{StaticResource BooleanConvert}'}"/>
</StackPanel>
[/code]
Hoàn chỉnh XAML sẽ như sau:
[code language="xml"]
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DataBinding"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="DataBinding.MainWindow"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:Converter x:Key="BooleanConvert" />
</Window.Resources>
<StackPanel Margin="30">
<CheckBox x:Name="checkBox" Margin="10" Content="Show Rectangle" IsChecked="True"></CheckBox>
<Rectangle Fill="#FF158B0A" Height="200" RadiusY="43" RadiusX="43"
Visibility="{Binding IsChecked, ElementName=checkBox, UpdateSourceTrigger=PropertyChanged,Converter='{StaticResource BooleanConvert}'}"/>
</StackPanel>
</Window>
[/code]
Ta được kết quả:
Chúc các bạn thành công: Download source
Đăng ký:
Đăng Nhận xét (Atom)
Search
Popular Posts
-
Phong cách thiết kế Material Design nhắm đến những đường nét đơn giản, sử dụng nhiều mảng màu đậm nổi bật, các đối tượng đồ họa trong giao ...
-
Hôm nay chúng ta sẽ tìm hiểu cách tạo ra các menu chuột phải trên ứng dụng WPF của mình. Ở bài này chúng ta xoay quanh việc tìm hiểu cách tạ...
-
Hôm nay tôi sẽ giới thiệu với các bạn một Framework đến từ Microsoft - framework này không quá lớn nhưng là khá mạnh khi các bạn làm việc vớ...
-
WPF vượt trội hơn Winform về khoản Drawing , trong đó đặc biệt WPF hỗ trợ đồ họa rất tốt vì nó tương tác trực tiếp đến GPU. Hôm nay chúng t...
-
Để dễ hiểu, các bạn hãy hình dung rằng: cùng một tập tin thực thi *.EXE nhưng bạn DoubleClick 10 lần cách quãng vào nó thì chuyện gì sẽ sảy ...
-
ReSharper là một công cụ Add-on cho Visual Studio, nó giúp lập trình viên tốn ít thời gian cho việc xem xét định dạng code, phong cách code,...
-
Hôm nay chúng ta sẽ thử đo xem thời gian query Data của "Foreach vs LinQ vs LinQasParallel" như thế nào. Tôi tạo một tool nhỏ để l...
-
Data Binding là kĩ thuật dùng để tạo gắn kết giữa phần giao diện ( UI ) và dữ liệu thông qua phần business logic hoặc giữa các đối tượng UI...
-
Chào các bạn, hôm nay tôi sẽ giới thiệu đến mọi người về một thư viện khác giúp chúng ta xây dựng một ứng dụng WPF với giao diện mang đậm ph...
-
Đối với lập trình hiện đại hiện nay, việc hỗ trợ người dùng tối đa cũng như trừu tượng hóa các công việc đến mức gần gủi và dễ hiểu nhất cho...
Recent Posts
Blog Archive
-
▼
2014
(18)
-
▼
tháng 12
(18)
- WPF - Các Vấn Đề Về Multi-Thread Trong WPF (Đa Luồng)
- Modern UI For WPF Thiết Kế Giao diện Modern Win8 V...
- WPF - Thiết Kế Giao Diện METRO Win8 Với Thư Viện M...
- WPF - Validation ValidationRule và Vấn Đề Về Thông...
- WPF - Validation ValidationRule và Vấn Đề Về Thông...
- Parallel Class Trong C# và Vấn Đề Xử lý Song Song
- Tìm Hiểu Về Delegate Trong C# và Cách Truyền Dữ Li...
- Extension Methods - Thêm Một Phương Thức Ngoài Vào...
- Indexer trong C# - Kỹ Thuật Duyệt Qua Phần Tử Tron...
- SourceCode - DataBinding và ValueConverter
- WPF - DataBinding và chuyển đổi kiểu dữ liệu IValu...
- SourceCode - DataBinding và UpdateSourceTrigger
- WPF - DataBinding và cở chế tự động update dữ liệu
- SourceCode - DataBinding
- WPF – Cơ Bản về Data Binding
- WPF - Bộ Công Cụ Đắc Lực Cho Thiết Kế Expression S...
- WPF - Các Thành Phần Của WPF
- WPF - Tổng quan về Windows Presentation Foundation
-
▼
tháng 12
(18)
0 nhận xét:
Đăng nhận xét