gpt4 book ai didi

c# - WPF MVVM 动态地将带有两个控件的行添加到 Grid/DataGrid

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

我正在研究 mvvm 并通过动态添加来面对这个问题 - 在简单的 win 形式中,我用一个循环很容易地做到了这一点,而且对 DataRow 的规范很少。
因此,任务是 - 将字符串列表中的所有元素放入包含两列的 Grid/DataGrid 中 - 第一个用于复选框,第二个用于基于字符串的控件。
我认为最好的办法是使用 DataGrid。所以我用这个 DataGrid 和按钮创建了一个 wpf 对话框,并为 ViewModel 创建了一个单独的文件。
现在我的 ViewModel 类包含一个字符串列表。
我卡住了.. 我读过一些 ObservableCollection<UIElement>在我的情况下,它必须包含两个控件的 DataGridRow (??) ..

编辑:我正在尝试 <DataGridCheckBoxColumn对于复选框和 <DataGridTemplateColumn用于控制。所以现在的问题是将这两列与字符串列表绑定(bind)-将字符串的值传递给控制并且一切正常。
我需要使用 ObservableCollection为了那个原因?

最佳答案

当我使用 mvvm 在 wpf 中绑定(bind)数据网格而不是将其视为行和列的集合时,我将其视为对象的集合 - 每行代表一个单独的对象,每列代表该对象的一个​​属性。因此,在您的情况下,您应该创建一个类来表示您在网格中显示的内容,并且其中将包含一个 bool 值和一个字符串属性(用于您所说的 2 列)。

public class MyListItem : ImplementPropertyChangedStuff
{
private string _myString;
private bool _myBool;

public MyListItem()
{ }

public string MyStringProperty
{
get { return _myString; }
set
{
_myString = value;
this.RaisePropertyChanged("MyStringProperty");
}
}

public bool MyBoolProperty
{
get { return _myBool; }
set
{
_myBool = value;
this.RaisePropertyChanged("MyBoolProperty");
}
}
}

现在在您的 View 模型中,您可以有一个单独的列表,而不是为每一列设置单独的列表。如果你想添加/删除/编辑行,那么你应该使用 observable 集合,因为它内置了 propertychanged 的​​东西,并且会在对集合进行任何更改时更新 ui。
public class MyViewModel
{
private ObservableCollection<MyListItem> _items;
public ObservableCollection<MyListItem> Items
{
get { return _items; }
set
{
_items = value;
this.RaisePropertyChanged("Items");
}
}

public MyViewModel()
{
this.Items = new ObservableCollection<MyListItem>();
this.LoadMyItems();
}

public void LoadMyItems()
{
this.Items.Add(new MyListItem { MyBoolProperty = true, MyStringProperty = "Hello" };
}
}

最后是 DataGrid 绑定(bind):
<DataGrid ItemsSource="{Binding Path=Items, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="MyBoolProperty" Binding="{Binding Path=MyBoolProperty}"
<DataGridTextColumn Header="MyStringProperty" Binding="{Binding Path=MyStringProperty"/>
</DataGrid.Columns>
</DataGrid>

关于c# - WPF MVVM 动态地将带有两个控件的行添加到 Grid/DataGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30344462/

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