Flo*_*anu 2 wpf binding datagrid selecteditem mvvm
我正在尝试使用MVVM模式处理数据网格.问题是每当我将绑定到SelectedItem的VM属性更改为null时,View都不会"取消选择"当前选定的项目.这是我在xaml中的绑定:
<DataGrid Grid.Column="0" Grid.Row="0"
ItemsSource="{Binding Path=Users}"
AutoGenerateColumns="False"
CanUserAddRows="False"
IsReadOnly="True"
SelectedItem="{Binding Path=SelectedUser, Mode=TwoWay}">
Run Code Online (Sandbox Code Playgroud)
SelectedItem绑定从视图工作到VM,因此在SelectedUser属性中我总是拥有所选对象.问题是在VM中我正在做一些有时将SelectedUser属性更改为null的东西,所以我希望datagrid也取消选择该行.相反,它仍然处于选中状态,如果我尝试单击同一行,则该属性不会更新.如果我单击任何其他行,属性将按预期更改.
有没有办法让datagrid取消选择,如果它的binded属性设置为null?此外,我正在寻找一个MVVM解决方案,因为我不想编写代码.我可以通过编写代码解决这个问题,所以不要浪费时间提供这样的解决方案:)
le:这是我在VM中的属性:
public RPLUser SelectedUser
{
get
{
return selectedUser;
}
set
{
selectedUser = value;
OnPropertyChanged("SelectedUser");
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
您是否尝试IsSynchronizedWithCurrentItem="True"在 DataGrid 的 xaml 属性中进行设置?AFAIK,这将允许您通过将 SelectedUser 设置为 null 来取消选择它。
我目前无法对其进行测试,但您也可以尝试将其添加到您的财产的 setter 中:
set
{
selectedUser = value;
OnPropertyChanged("SelectedUser");
ICollectionView collectionView = CollectionViewSource.GetDefaultView(Users);
collectionView.MoveCurrentTo(selectedUser);
}
Run Code Online (Sandbox Code Playgroud)
(为了ICollectionView做任何事情,你需要IsSynchronizedWithCurrentItem设置)
就像我说的,我现在不能测试这个。此外,属性的 setter 可能不是放置它的最佳位置。也许在PropertyChanged本地为事件创建一个事件处理程序并将该逻辑放在那里。
如果有帮助,请告诉我,否则我会看看是否可以进行简短的测试...
我建议检查Output Window视觉工作室,看看是否有任何Binding失败.
你确定当你选择某个东西时,选择会更新到SelectedUser属性中吗?
你是否在setter中设置了一个断点,SelectedUser并且当你在datagrid上选择一些东西时它是否正在击中?
这种Binding打破的原因可能很多......
SelectedUser是个人的不同类型Users.SelectedUser与参考中的任何项目不匹配Users.在我的情况下,以下代码完全正常...
<tk:DataGrid MaxHeight="200" AutoGenerateColumns="False"
ItemsSource="{Binding}"
SelectedItem="{Binding MySelItem,
ElementName=MyDGSampleWindow,
Mode=TwoWay}"
IsReadOnly="True">
<tk:DataGrid.Columns>
<tk:DataGridTextColumn Header="Key"
Binding="{Binding Key,
Mode=OneWay}"/>
<tk:DataGridTextColumn Header="Value"
Binding="{Binding Value,
Mode=OneWay}"/>
</tk:DataGrid.Columns>
</tk:DataGrid>
Run Code Online (Sandbox Code Playgroud)
当我设置MyDGSampleWindow.MySelItem为null时,datagrid属性取消选择.也许您可能需要向我们提供更多关于如何将值实际设置为null的输入.
| 归档时间: |
|
| 查看次数: |
19915 次 |
| 最近记录: |