0

我想在我的班级中存储名称值对。我尝试了以下方法并最终遇到了以下问题;

  1. 使用NameValeCollection:这并不成功。因为我想将此 Collection 绑定到DataTemplateas ItemsSource。我成功绑定了名称,但没有绑定集合中的

模板和 XAML

 <DataTemplate x:Key="MyCollectionTemplate">
    <Grid>
        <TextBlock Text="{Binding Mode=OneWay}"/>
        <TextBox Name="CValue" Text="{Binding Path=Value}"/> //did not work this binding
    </Grid>
 </DataTemplate>     

 <ItemsControl ItemsSource="{Binding MyCollection}"  x:Name="MyCollectionControl" ItemTemplate="{DynamicResource MyCollectionTemplate}" />   

MyCollection是个NameValueCollection.

  1. 使用List<KeyValuePair<string,string>>:在这种情况下,我成功绑定了键值对。但不幸的是,这只支持OneWay绑定。所以我也不能使用它。

请建议我一种方法来处理这个问题。我也不能用Dictionary。因为在 Name Value Pair 中 Key 不是唯一的。

4

3 回答 3

2

为什么不创建自己的自定义类?IE

public class MyClass
{
    public string Key { get; set; }
    public string Value { get; set; }
}

然后只需要一个列表,或者该类的可观察集合。

ObservableCollection<MyClass> MyCollection
{
    get;
    set;
}

请注意,如果您的集合值可能会更改,则需要在 MyClass 中实现 INotifyProperyChanged。

于 2013-02-27T09:26:56.633 回答
1

对于收藏,我建议使用ObservableCollection<T>.

名称/值对听起来很简单,因此如果您想要更改该对的名称和值的通知,您可以实现一个具有这两个属性的类并自己更改通知(例如通过INotifyPropertyChanged)并在您的集合中使用它。

您可以在INotifyPropertyChanged此处找到有关如何在您的类上实现的示例:
如何:实现属性更改通知

如果您同时执行这两项操作,您将收到有关名称/值对的添加和删除以及名称/值对的TwoWay绑定的更改通知。

于 2013-02-27T09:27:16.493 回答
0

您可以使用类Tuple

Tuple<string,string> t = Tuple.Create("key", "value");
string key = t.Item1;
string value = t.Item2;
于 2013-02-27T09:51:01.603 回答