gpt4 book ai didi

wpf - 将 MVVM 用于 WPF 对话框

转载 作者:行者123 更新时间:2023-12-03 10:30:30 24 4
gpt4 key购买 nike

我想在我的 WPF 应用程序中使用 MVVM。我目前有一个模型和一个 View ,其中包含 DataGrid 和其他一些控件。我根据我的模型创建了一个 ViewModel,但不知道我是否做得正确。该 View 只是一个简单的对话框。我想填充 DataGrid View 。

如何告诉 DataGrid 与 ViewModel 绑定(bind)?

我想将属性(在 View 模型中,如 ID 和日期)绑定(bind)到数据网格 .

因此,如果列表中有两个对象,我希望在 datagrid 中看到具有特定 ID 和日期的两行。

我在类中设置数据上下文而不是 xaml。

这是到目前为止的代码:

public class ViewModel : INotifyPropertyChanged
{
private string _id;
private DateTime _date;
private ObservableCollection<Object> _list;

public string Id
{
get { return _id; }
set
{
_id = value;
PropertChanged("Id");
}
}
public DateTime Date
{
get { return _date; }
set
{
_date = value;
PropertChanged("Date");
}
}
public ObservableCollection<Object> list
{
get { return _list; }
set
{
_list = value;
PropertChanged("list");
}
}

public LicenseViewModel()
{
list = GetList();
}
public event PropertyChangedEventHandler PropertyChanged;

public void PropertChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}

和 XAML:
<Window x:Class="Import"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:Controls="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
mc:Ignorable="d"
ResizeMode="CanResizeWithGrip"
x:Name="ImportLicense"
d:DesignHeight="493" d:DesignWidth="559"
Title="Import Licenses" SizeToContent="WidthAndHeight">

<Grid Width="538">
<DataGrid x:Name="Imported" VerticalAlignment="Top" AutoGenerateColumns="False" CanUserResizeColumns="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Entitlement ID" Binding="{Binding Path=ID}"/>
<DataGridTextColumn Header="Date Sold" Binding="{Binding Path=Date}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>

最佳答案

您需要为 DataGrid 设置数据上下文到您的 View 模型的实例。您可以通过简单地设置 DataContext 来做到这一点。在 View 类的构造函数中将您的 View 或 DataGrid 复制到您的 View 模型实例。这是一种快速而肮脏的方式。

如果你想更复杂,你可以创建一个 DepenencyProperty在你的 View 类上是这样的:

public static DependencyProperty ViewModelProperty =
DependencyProperty.Register("ViewModel",
typeof(ItemViewModel),
typeof(ViewClassHere));

public ItemViewModel ViewModel
{
get { return (ItemViewModel)base.GetValue(ItemViewModel); }
set { base.SetValue(ItemViewModel, value); }
}

然后您可以通过多种方式中的任何一种绑定(bind)到该属性,但一种方式是:
<DataGrid  ItemsSource="{Binding ElementName=windowName, Path=viewName.list}">

有很多方法可以做到这一点,这只是两种可能的方法。

关于wpf - 将 MVVM 用于 WPF 对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5812443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com