gpt4 book ai didi

c# - 带有 DataTemplate 的 ListBox 识别 SelectedItem

转载 作者:行者123 更新时间:2023-11-30 21:39:02 27 4
gpt4 key购买 nike

我有一个 ListBox,其中包含一个简单的 DataTemplate、一个 CheckBox 和一个 TextBox。如果用户选中了一个 CheckBox,我想得到这个改变的项目,比如 ListBox 的属性 SelectedItem

如何从 List2 中获取已更改的元素?

我的列表项:

public class MyListItem2 : ReactiveObject
{

private string _name;
public string Name
{
get { return _name; }
set
{
this.RaiseAndSetIfChanged(ref _name, value, "Name");
}
}
private bool _isMarked;
public bool IsMarked
{
get { return _isMarked; }
set
{
this.RaiseAndSetIfChanged(ref _isMarked, value, "IsMarked");
}
}
}

查看:

<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DataTemplate.Views.MainWindow"
xmlns:viewsmodels="clr-namespace:DataTemplate.ViewModels;assembly=DataTemplate"
xmlns:dt="clr-namespace:DataTemplate;assembly=DataTemplate"
Title="DataTemplate" Width="700">
<Window.DataContext>
<viewsmodels:MainWindowViewModel />
</Window.DataContext>

<Grid ColumnDefinitions="250">
<ListBox Grid.Column="1" Items="{Binding List2}">
<ListBox.ItemTemplate>
<DataTemplate DataType="dt:MyListItem2">
<Grid ColumnDefinitions="50*,50*">
<CheckBox Grid.Column="0" Content="Mark" IsChecked="{Binding IsMarked}"/>
<TextBox Grid.Column="1" Text="{Binding Name}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>

View 模型:

public class MainWindowViewModel : ReactiveObject
{
public ObservableCollection<MyListItem2> List2 { get; set; }

public MainWindowViewModel()
{
List2 = new ObservableCollection<MyListItem2>();
Random rand = new Random();

for (int i = 0; i < rand.Next(1, 20); i++)
{
MyListItem2 mli = new MyListItem2();
mli.Name = "ListItem" + i;
mli.IsMarked = false;
mli.PropertyChanged += ItemChanged;
List2.Add(mli);
}
}
private void ItemChanged(object sender, PropertyChangedEventArgs e)
{
var item = sender as MyListItem2;
Console.WriteLine(string.Format("changed: {0} {1}", item.Name, item.IsMarked));
}
}

最佳答案

我可以看到两种方式:

  • 由于您使用的是 MVVM,因此在 MyListItem2 类 ( Microsoft Reference on INotifyPropertyChanged implementation ) 上实现 INotifyPropertyChanged 接口(interface)。当设置/更改 IsMarked 值时引发属性更改事件,然后连接到项目的 PropertyChanged 事件处理程序以确定何时更改。 .或者
  • 如果您有代码隐藏,请通过 XAML 在复选框本身上添加“选中”和/或“未选中”事件处理程序。如下所示。

    CheckBox Grid.Column="0"Content="Mark"IsChecked="{Binding IsMarked}"/>
    Checked="IsMarked_Checked"

代码隐藏

public void IsMarked_Checked(object sender, RoutedEventArgs e)
{
var ck = sender As Checkbox;

if (ck == null)
{
return;
}

// do whatever you need to here using the datacontext of the Checkbox
}

关于c# - 带有 DataTemplate 的 ListBox 识别 SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45423086/

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