gpt4 book ai didi

Silverlight 如何将选定的数据网格行传递给 View 模型

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

我在 View 中有一个数据网格

<Grid x:Name="LayoutRoot" Background="White" Width="600" MaxHeight="150">
<sdk:DataGrid x:Name="grid1" ItemsSource="{Binding Persons}" SelectedItem="{Binding MyList, Mode=TwoWay}">
</sdk:DataGrid>
</Grid>

在我的 ViewModel 中,我有以下代码
private ObservableCollection<string> myList;
public ObservableCollection<string> MyList
{
get { return myList; }
set
{
myList = value;
NotifyPropertyChanged(vm => vm.MyList);
}

而对于 DG
 private ObservableCollection<Person> person;    
public ObservableCollection<Person> Persons
{
get { return person; }
set
{
person = value;
NotifyPropertyChanged(vm => vm.Persons);
}
}

我希望从 View 中可以将数据网格的选定项(行)绑定(bind)到我的 View 模型中的 MyList 集合(也许 IList 与 OC?)。我只需要所选行中的一个值,例如地址或 zip。但是我是否需要将整个集合传递给我能否以另一种方式将一个单元格值传递到 View 模型中?

例如,这是我用来填充数据网格的类
        public void CreateList()
{
Person p = new Person();
p.FirstName = "Bob";
p.LastName = "Jones";
p.Address = "123 Main Street";
p.City = "Wilmington";
p.State = "NC";
p.Zip = "12345";


Person p1 = new Person();
p1.FirstName = "Sue";
p1.LastName = "Smith";
p1.Address = "1222 Main Street";
p1.City = "Tampa";
p1.State = "FL";
p1.Zip = "12345";

Person p2 = new Person();
p2.FirstName = "Chris";
p2.LastName = "Jones";
p2.Address = "234 Water Street";
p2.City = "Dallas";
p2.State = "TX";
p2.Zip = "22222";

Person p3 = new Person();
p3.FirstName = "Andy";
p3.LastName = "Jones";
p3.Address = "434 Main Street";
p3.City = "Columbia";
p3.State = "SC";
p3.Zip = "12345";

ObservableCollection<Person> Result = new ObservableCollection<Person>();
Result.Add(p);
Result.Add(p1);
Result.Add(p2);
Result.Add(p3);

Persons = Result;
}

加载 View 模型时会触发此类。我希望能够选择第三行数据,并且只将地址值传递回 VM。我最初的想法是将整个选定的行传递回虚拟机,然后从该集合中提取地址。

使用 selectedItem 绑定(bind)不起作用,选择一行永远不会触发 vm 中的 inotify 事件,所以我知道集合没有被更新,除非我点击 DG 然后在它外面只传递一个空值。其次,与使用后面的代码提取值然后将其传递给 VM 相比,是否有更有效的方法来执行此操作?我曾想过在 View 中使用选择更改事件,然后将列值设置为传递给 vm 的绑定(bind)字段,但这似乎很棘手。

感谢您的任何建议或想法。

-干杯

最佳答案

它认为你用这个 MyList 投了一点曲线球要“绑定(bind)所选项目”的属性。在其他任何地方,包括您自己的解决方案,您都指的是绑定(bind)到单个项目。那么为什么要接收它的属性是列表类型呢?

在我看来,您需要的是删除 MyList 并简单地拥有:-

 private Person mySelectedItem;
public Person SelectedItem
{
get
{
return mySelectedItem;
}
set
{
mySelectedItem = value;
NotifyPropertyChanged("SelectedItem");
}
}

现在你绑定(bind)到 DataGrid会有意义:-
<sdk:DataGrid x:Name="grid1" ItemsSource="{Binding Persons}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}">   

还有你的 TextBlock看起来像:-
  <TextBlock x:Name="textholder" Text="{Binding SelectedItem.FirstName}" /> 

关于Silverlight 如何将选定的数据网格行传递给 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536600/

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