gpt4 book ai didi

wpf - MVVM ListBox 控制内容控件

转载 作者:行者123 更新时间:2023-12-03 04:11:27 26 4
gpt4 key购买 nike

我已经为此兜圈子好几天了,我希望 WPF 专家能够看到我哪里出了问题。

我正在代码中设置 CurrentViewModel。我的列表框的选定项目和我的内容控件的内容正确绑定(bind)。但是,当通过 UI 更改列表框中的所选项目时,会设置 CurrentViewModel,但不会更新内容控件。

我正在使用数据模板来映射我的 View 和 View 模型。

    <DataTemplate DataType="{x:Type ViewModel:MyViewModel}">
<View:MyView />
</DataTemplate>

我有一个 ListBox,它绑定(bind)到一个可观察的 ViewModel 集合。所选项目绑定(bind)到当前 View 模型。

 <ListBox ItemsSource="{Binding MyViewModelCollection}" DisplayMemberPath="DisplayName" SelectedItem="{Binding CurrentViewModel, Mode=TwoWay}"/>

我还有一个也绑定(bind)到 CurrentView Model 的内容控件

 <ContentControl Content="{Binding CurrentViewModel, Mode=TwoWay}"/>

这是它们都绑定(bind)到的属性

        public MyViewModel CurrentViewModel
{
get
{
return _currentViewModel;
}
set
{
if (_currentViewModel== value) return;

_currentViewModel= value;
OnPropertyChanged("CurrentViewModel");
}
}

为了清晰起见,我编辑了名称并删除了格式信息。

非常感谢任何帮助。

干杯,

丹尼尔

编辑:发现了链接How can I debug WPF bindings? 。我在内容绑定(bind)上设置了一个断点,它确实只在首次设置绑定(bind)时被调用一次。

最佳答案

您不应将 TwoWay 设置为 ContentControl 上的模式:

<ContentControl Content="{Binding CurrentViewModel, Mode=OneWay}"/>

这是因为您希望 ContentControl读取该值,但绝不写入它。

<小时/>

顺便说一句,您还可以将 ContentControl 绑定(bind)到集合中当前选定的项目,而不是通过执行以下操作绑定(bind)到该属性:

<ListBox ItemsSource="{Binding MyViewModelCollection}" 
DisplayMemberPath="DisplayName"
IsSynchronizedWithCurrentItem="True"/>

<ContentControl Content="{Binding MyViewModelCollection/}"/>

集合末尾的“斜杠”(/) 表示在集合中选择的当前项目,设置当前项目属性就像将 IsSynchronizedWithCurrentItem 设置为 true 一样简单。

很多时候,我发现使用这种组合,我真的不需要 View 模型上的额外属性。

无论如何,我希望这会有所帮助。

关于wpf - MVVM ListBox 控制内容控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1904009/

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