使用私有字段作为ItemsControl的ItemsSource?

时间:2011-05-10 16:55:25

标签: .net wpf data-binding binding dependency-properties

让我们上课:

public partial class MyControl: UserControl{
    private ObservableCollection<string> names = 
            new ObservableCollection<string>();
    ...
}

然后在XAML中找到类UserControl的XAML中相同的MyControl

<UserControl x:Class="MyProject.MyControl" xmlns="..." xmlns:x="...">
    <ItemsControl ItemsSource="{Binding ???????}" />
</UserControl>

是否可以将???????替换为将ItemsSource绑定到代码后面的names字段的内容?如果有方法,这样做的正确方法是什么?如果names无法成为依赖属性而不仅仅是字段?

1 个答案:

答案 0 :(得分:3)

您只需要为名称

创建公共getter属性
public IEnumerable<string> Names
{
     get{return names;}
}

它不需要是依赖属性。

然后你的xaml可以

<ItemsControl ItemsSource="{Binding Names}" />

编辑: 重新阅读你的标题。如果你想保持名称私有,你必须在后面的代码中进行绑定。

        Binding b = new Binding();
        b.Source = names;
        itemsControl.SetBinding(ItemsControl.ItemsSourceProperty, b);