我(C# 和 WPF 中的新手)正在尝试从更多源(类属性)绑定数据,但我对不同的指南和建议感到有些困惑。我想动态添加User
suserList
并同时显示例如最后一个插入和整个列表。这是在源代码的不同位置完成的,但就像我的示例的构造函数一样简单。我应该如何以及在哪里为这三个元素(myName
,myTitle
和myUserList
)设置绑定和数据上下文以反映主类属性的变化?我应该每次调用更新绑定目标的函数,还是this.datacontext
在编辑属性后设置?或者我应该绑定到某个返回我需要的值的函数(如果可能的话)?我对绑定到对象和数据上下文等的属性有点迷茫。这是我所拥有的一个例子:
<Window x:Name="Window" x:Class="WpfTest.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:WpfTest">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<StackPanel>
<TextBox x:Name="myName" Text="" Grid.Column="1"/>
<TextBox x:Name="myTitle" Text="" Grid.Column="0"/>
</StackPanel>
<ListBox x:Name="myUserList">
</ListBox>
</Grid>
</Window>
和
public partial class MainWindow : Window {
public User myUser;
public Dictionary<int,User> userList= new Dictionary<int, User>();
public object SubWindow { get; private set; }
public MainWindow() {
newUser = new User();
newUser.Title = "John Doe";
newUser.Name = "Dr.";
this.userList.Add(index,newUser);
this.myUser=newUser;
InitializeComponent();
}
}
和
public class User
{
public String Name { get; set; }
public String Title { get; set; }
}
感谢您的任何建议。
首先,WPF 在您使用MVVM时效果最佳,总体思路是实现INotifyPropertyChanged,您添加到您的任何项目更改,都会传播到框架并更新您的视图。
使用列表时,请使用ObservableCollection。如果要向其动态添加项目,则需要改为修改 ObservableCollection。为了获得最佳结果,在您的 UserControl 中,使用特定类型的DataTemplate来显示您的值的格式化版本。
对于第二部分,显示最后添加的项目,有几种方法可以解决这个问题,最好的方法是添加一个可以保存数据的新项目(Grid、Stackpanel 等),使用 Binding 将其值设置为与您的列表(即 ObservableCollection)相同的上下文并创建一个转换器,它将使用 ObservableCollection 作为输入,在您的特定转换器实现中,只需添加最后一项并将其显示到您想要的控件(您可以使用 dataTemplate也为此)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句