我陷入了必须将集合绑定到动态用户控件的部分。场景是这样的。
我有一个动态控件,有一个扩展器、数据网格、组合框和文本框,其中组合框和文本框位于数据网格内。他们已经有两个收藏品了。一个与组合框绑定,另一个与数据网格绑定。当组合框中的项目发生更改时,其各自的值将设置为其各自的文本框,依此类推。然后将这对值设置为与datagrid绑定的集合。一个用户可以添加多个项目。
现在的主要问题是所有这些事情都发生在动态添加的用户控件内,即按钮单击事件。用户可以向表单添加所需数量的用户控件。
在这种情况下问题就来了。假设我添加了 3 个控件。现在,在第一个中,如果我向集合添加代码,那么它也会反映在接下来的两个控件中,因为它们与同一个集合绑定。
所以,我想知道是否可以重新生成/重命名同一集合,以便不会出现上述情况。
如果没有大局观,很难回答你的问题,但我有一种感觉,你的处理方式是错误的。您似乎是直接从代码添加用户控件的实例。你不应该这样做,而应该创建某种ItemsControl
在你的 XAML 中,以及在它的ItemTemplate
让您的用户控制。绑定那个ItemsControl
到视图模型中的集合,并且仅操作该集合。
您不应该引用视图模型或隐藏代码中的可视控件。每当您发现自己直接从代码引用视觉元素时,您的脑海中应该会升起一个警告标志“嘿!还有比这更好的方法!”...
Example:
视图模型:
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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)