gpt4 book ai didi

wpf - 如何在运行时将可观察集合绑定(bind)到多个用户控件?

转载 作者:行者123 更新时间:2023-12-04 07:00:01 24 4
gpt4 key购买 nike

我被困在必须将集合绑定(bind)到动态用户控件的部分。场景是这样的。
我有一个动态控件,有一个扩展器、数据网格、组合框和文本框,其中组合框和文本框位于数据网格内。他们已经有两个系列了。一个与组合框绑定(bind),另一个与数据网格绑定(bind)。当项目在组合框中更改时,其各自的值将设置为其各自的文本框,依此类推。然后将这对值设置为与 datagrid 绑定(bind)的集合。一个用户可以添加多个项目。

现在的主要问题是所有这些事情都发生在动态添加的用户控件中,即按钮单击事件。用户可以向表单添加所需数量的用户控件。
在这种情况下问题来了。假设我添加了 3 个控件。现在在第一个中,如果我向集合添加代码,那么它也会反射(reflect)在接下来的两个控件中,因为它们与同一个集合绑定(bind)。
所以,我想知道无论如何要重新生成/重命名同一个集合,以免出现上述情况。

最佳答案

在没有看到大局的情况下很难回答您的问题,但是我有一种感觉,您正在以错误的方式解决这个问题。您似乎是直接从代码中添加用户控件的实例。而不是这样做,您应该创建某种 ItemsControl在您的 XAML 及其 ItemTemplate 中让您的用户控制。绑定(bind) ItemsControl到 View 模型中的集合,并且只操作该集合。

您不应该在 View 模型或后面的代码中引用视觉控件。每当您发现自己直接从代码中引用视觉元素时,它应该在您的脑海中发出警告标志“嘿!有比这更好的方法!”...

例子:

View 模型:

public class ViewModel
{
public ObservableCollection<MyDataObject> MyDataObjects { get; set; }

public ViewModel()
{
MyDataObjects = new ObservableCollection<MyDataObject>
{
new MyDataObject { Name="Name1", Value="Value1" },
new MyDataObject { Name="Name2", Value="Value2" }
};
}
}

public class MyDataObject
{
public string Name { get; set; }
public string Value { get; set; }
}

包含列表框和数据模板的窗口 XAML 片段:
<Window.Resources>
...
<DataTemplate x:Key="MyDataTemplate">
<local:MyUserControl/>
</DataTemplate>
</Window.Resources>
...
<ListBox ItemsSource="{Binding MyDataObjects}"
ItemTemplate="{StaticResource MyDataTemplate}"
HorizontalContentAlignment="Stretch"/>

用户控制:
<UniformGrid Rows="1">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Value}" HorizontalAlignment="Right"/>
</UniformGrid>

关于wpf - 如何在运行时将可观察集合绑定(bind)到多个用户控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2021017/

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