我的问题的简化版本:我有两个简单的用户控件 Apple 和 Banana(视图),它们各自包含 2 个属性的相应视图模型。我还有一个 ListBox 作为 Apple 和 Banana 属性的“设置”。
苹果:
<UserControl>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="0,0,20,0" Text="{Binding AppleID}"/>
<TextBlock Text="{Binding Size}"/>
</StackPanel>
</UserControl>
香蕉:
<UserControl>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="0,0,20,0" Text="{Binding BananaID}"/>
<TextBlock Text="{Binding Length}"/>
</StackPanel>
</UserControl>
苹果虚拟机:
public class AppleViewModel : Notifier
{
private string appleID;
public string AppleID
{
get => appleID; set
{
appleID = value;
OnPropertyChanged("AppleID");
}
}
private int size;
public int Size
{
get => size; set
{
size = value;
OnPropertyChanged("Size");
}
}
}
香蕉虚拟机:
public class BananaViewModel : Notifier
{
private string bananaID;
public string BananaID
{
get => bananaID; set
{
bananaID = value;
OnPropertyChanged("BananaID");
}
}
private int length;
public int Length
{
get => length; set
{
length = value;
OnPropertyChanged("Length");
}
}
}
主窗口如下所示:
<Window>
<StackPanel Orientation="Vertical">
<local:AppleControlxaml x:Name="apple"/>
<local:BananaControl x:Name="banana"/>
<ListBox>
</ListBox>
</StackPanel>
</Window>
为了更快地设置,我在主窗口后面的代码中分配了 DataContext。在实际情况中,我使用了窗口视图模型。
现在我希望 listBox 控件显示并允许用户设置正在聚焦的用户控件的属性值。典型的交互是 Select/Mousedown Apple user control area -> Change length in listbox -> See that apple user control values changed。
如果用户选择/鼠标按下 Banana 用户控件,他/她应该也可以这样做。
问题是:如何使用 MVVM 和数据绑定来实现此设置功能?我尝试为要绑定到的视图框的 ItemsSource 创建一个 ObservableCollection,但是如何确保集合正确更新苹果视图模型?
陪伴而非守候
相关分类