待办事项小程序(1)
这是一个wpf的mvvm模式的练手小程序。
需求:见动图演示
如果勾选,则代表事情完成,文字会加上下划线。
见下面的xaml代码:
<Window x:Class="ADTVPro.MtvMainWindow"
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:ADTVPro"
mc:Ignorable="d"
Title="MtvMainWindow" Height="450" Width="800">
<Grid>
<TabControl>
<TabItem Header="全部歌曲">
<Grid Background="#FFE5E5E5">
<ListBox x:Name="AllSongsListBox" d:ItemsSource="{d:SampleData ItemCount=5}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="2">
<TextBlock Text="{Binding SongName}" FontWeight="Bold" FontSize="14"/>
<TextBlock Text="{Binding Pinyin}" FontSize="12" Foreground="Gray"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</TabItem>
<TabItem Header="选中的歌曲">
<Grid Background="#FFE5E5E5">
<ListBox d:ItemsSource="{d:SampleData ItemCount=5}"/>
</Grid>
</TabItem>
</TabControl>
</Grid>
</Window>

xaml源码:
几个说明:
(1)命名空间
<Window ... >: 这是定义 WPF 窗口的根元素。 x:Class="WpfApp1.MainWindow": 这指示该 XAML 文件与名为 MainWindow 的类相关联,该类位于 WpfApp1 命名空间中。 这允许你在 C# 或其他 .NET 语言中编写与该窗口交互的代码。 xmlns 属性: 这些定义了不同的 XML 命名空间(Namespace),使得你可以使用来自这些命名空间的元素和属性。 xmlns="...":定义了默认的 XML 命名空间,用于 WPF 的核心元素。 xmlns:x="...":定义了 x 前缀的命名空间,用于 XAML 特定的元素和属性,如 x:Class。 xmlns:d="...":定义了 d 前缀的命名空间,该命名空间通常用于设计时的数据和属性, 这些数据和属性在运行时会被忽略(由 mc:Ignorable="d" 指定)。 xmlns:mc="...":定义了 mc 前缀的命名空间,用于标记兼容性设置。 xmlns:local="clr-namespace:WpfApp1":定义了 local 前缀的命名空间, 用于引用与 XAML 文件位于同一项目中的 CLR (Common Language Runtime) 命名空间。 xmlns:sys="clr-namespace:System;assembly=mscorlib":这定义了一个到 System 命名空间的引用, 但通常你不需要在 WPF 的 XAML 中直接引用 mscorlib 除非有特定的需求。 mc:Ignorable="d": 这告诉 XAML 解析器忽略 d 命名空间中的所有元素和属性。 这允许你在设计时添加数据(如 Blend 使用的数据),而这些数据在编译和运行应用时不会被包含。
(一)Prism的区域
引用上篇的代码
ViewModel这段代码虽然能完成功能,但是有下面的缺点:
1。 viewmodel里加入太多的控制代码,你Ui如果复杂点,会变成到处都是binding,造成viewmodel中的代码维护越来越复杂。
(一)安装Prism包,及vs的创建Prism项目模板
安装nuget包: Prism.DryIoc
安装Prism的项目模板:

需求:
滑动条拖动,文本框值变化
文本框值变,滑动条值也变化
实际上是一种控件双方绑定的需求。
控件操作的反面例子如下:
数据和UI混在一起。i是数据,却和UI操作写成一堆。
<ListBox x:Name="lbx1"/>
for(int i=0;i<10;i++)
{
lbx1.Items.Add(new ListBoxItem()
{
Content = new TextBlock()
{
Text = i.ToString()
}
});
}Powered By Z-BlogPHP 1.7.3
Copyright www.skcircle.com Rights Reserved.