我正在尝试将新项目添加到通用列表中。在我的XAML应用程序中,我有2个文本框,我已绑定到属性。
<TextBox Text="{Binding Path=ModelItem.ReplaceThis, Mode=TwoWay}"></TextBox>
<TextBox Text="{Binding Path=ModelItem.ReplaceWithThat, Mode=TwoWay}"></TextBox>
按钮单击我想将两个字段的值添加到通用列表中,该列表将显示在ListBox中,绑定到通用列表属性
<Button Name ="btnReplaceAdd" Content="Add" Width="50" Click="btnReplaceAdd_Click"></Button>
<ListBox ItemsSource="{Binding Path=ModelItem.ReplaceItems, Mode=OneWay}"/>
在访问属性的代码中我有以下代码。
private void btnReplaceAdd_Click(object sender, RoutedEventArgs e)
{
var _with = this.ModelItem.Properties["ReplaceThis"].Value;
var _what = this.ModelItem.Properties["ReplaceWithThat"].Value;
var foo = new List<RenameReplace>();
var bar = new RenameReplace() { Rwht = _what.ToString(), Rwth = _with.ToString() };
foo.Add(bar);
this.ModelItem.Properties["ReplaceItems"].SetValue(foo);
this.ModelItem.Properties["ReplaceThis"].SetValue("");
this.ModelItem.Properties["ReplaceWithThat"].SetValue("");
}
一旦执行方法结束而不是看到我传递的值,我会在列表框中看到MyProject.RenameReplace
。
我的问题是我将XAML ListBox绑定到通用属性的方式,还是我将项目添加到通用列表的方式?
答案 0 :(得分:0)
由于@fmunkert指出使用ItemTemplate
必须替换
背后的代码中的后4行var foo = new List<RenameReplace>();
var bar = new RenameReplace() { Rwht = _what.ToString(), Rwth = _with.ToString() };
foo.Add(bar);
this.ModelItem.Properties["ReplaceItems"].SetValue(foo);
用这个
var bar = new RenameReplace() { Rwht = _what, Rwth = _with };
this.ModelItem.Properties["ReplaceItems"].Collection.Add(bar);
现在XAML必须改变
<ListBox ItemsSource="{Binding Path=ModelItem.ReplaceItems, Mode=OneWay}"/>
以便能够并排显示两个项目。
<ListBox ItemsSource="{Binding Path=ModelItem.ReplaceItems, Mode=OneWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Path=ModelItem.Rwht}" />
<TextBlock Grid.Column="1" Text="{Binding Path=ModelItem.Rwth}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>