如何通过ModelItem.Properties类将项添加到通用列表?

时间:2014-05-27 17:58:53

标签: c# wpf xaml generics

我正在尝试将新项目添加到通用列表中。在我的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绑定到通用属性的方式,还是我将项目添加到通用列表的方式?

1 个答案:

答案 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>