110,567
社区成员
发帖
与我相关
我的任务
分享
<controls:HamburgerMenu.ContentTemplate>
<DataTemplate>
<controls:TransitioningContentControl Grid.Row="1"
RestartTransitionOnContentChange="True"
Transition="Default">
<controls:TransitioningContentControl.ContentTemplate>
<DataTemplate>
<ListView Margin="0 0 0 0" BorderThickness="1" SelectedIndex="0" ItemsSource="{Binding PrintJobs, Mode=OneWay}" Style="{StaticResource VirtualisedMetroListView}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding JobID, Mode=OneWay}" Header="编号" Width="80" />
<GridViewColumn DisplayMemberBinding="{Binding JobName}" Header="名称" Width="400"/>
</GridView>
</ListView.View>
</ListView>
</DataTemplate>
</controls:TransitioningContentControl.ContentTemplate>
</controls:TransitioningContentControl>
</DataTemplate>
</controls:HamburgerMenu.ContentTemplate>
public class PrintJobT
{
public UInt64 JobID { get; set; }
public string JobName { get; set; }
public PrintJobT()
{ }
public PrintJobT(UInt64 JobID, string JobName)
{
this.JobID = JobID;
this.JobName = JobName;
}
}
public List<PrintJobT> printJobs;
public List<PrintJobT> PrintJobs
{
get
{
return printJobs;
}
set
{
if (printJobs != value)
{
printJobs = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(PrintJobs)));
}
}
}
namespace WpfApplication2
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WpfApplication2
{
class MainViewModel:INotifyPropertyChanged
{
public MainViewModel()
{
dataList = new List<Data>
{
new Data{Number=1,Name="A"},
new Data{Number=2,Name="B"}
};
}
public event PropertyChangedEventHandler PropertyChanged;
public class Data
{
public int Number { get; set; }
public string Name { get; set; }
}
List<Data> dataList;
public List<Data> DataList
{
get
{
return dataList;
}
set
{
if (dataList != value)
{
dataList = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(DataList)));
}
}
}
}
}
只有一个list,就是dataList
DataList是属性,是对dataList的封装,主要是set访问器,当要改变dataList时,顺带调用PropertyChanged通知界面进行更新
public class Data: INotifyPropertyChanged
{
int number;
public int Number
{
get
{
return number;
}
set
{
if (number != value)
{
number = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(Number)));
}
}
}
。。。
如果只是要改变list个数,例如add添加时反映到界面,就用ObservableCollection替代List
ObservableCollection<Data> dataList;
public ObservableCollection<Data> DataList
{
get
{
return dataList;
}
set
{
if (dataList != value)
{
dataList = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(DataList)));
}
}
}
如果想省事,想不管是list添加删除记录,还是只是修改某条记录的某个属性,也不想写更多的代码,就统统最后
dataList = new 。。。
<Window x:Class="WpfApplication2.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:WpfApplication2"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListView ItemsSource="{Binding DataList}" DisplayMemberPath="Name"/>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication2
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
dataList = new List<Data>
{
new Data{Number=1,Name="A"},
new Data{Number=2,Name="B"}
};
}
public event PropertyChangedEventHandler PropertyChanged;
public class Data
{
public int Number { get; set; }
public string Name { get; set; }
}
List<Data> dataList;
public List<Data> DataList
{
get
{
return dataList;
}
set
{
if (dataList != value)
{
dataList = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(DataList)));
}
}
}
}
}