很抱歉,如果这是基本的,但我没有找到一个很好的例子,准确描述我需要做什么来启用以下场景:
我有两个班级:
public class Thing:DependencyObject {
// Fields
private string name = "";
// Properties
public string Name
{
get { return name; }
set { name = value; }
}
// Dependency Properties
public int Count
{
get { return (int)GetValue(CountProperty); }
set { SetValue(CountProperty, value); }
}
public static readonly DependencyProperty CountProperty =
DependencyProperty.Register("Count", typeof(int), typeof(Thing), null);
// Methods
public override string ToString()
{
return DateTime.Now.ToString() + " " + this.Name + " " + this.Count.ToString();
}
// Constructors
public Thing(string name)
{
this.Name = name;
}
}
和一个包含Thing对象的类
public class Things:DependencyObjectCollection {
}
MainPage.xaml.cs文件创建了几个Thing对象并将它们添加到Things集合中。
公共部分类MainPage:PhoneApplicationPage { 事物=新事物();
// Constructor
public MainPage()
{
InitializeComponent();
Thing thingA = new Thing("A");
Thing thingB = new Thing("B");
Things.Add(thingA);
Things.Add(thingB);
}
private void Action_Click(object sender, RoutedEventArgs e)
{
this.Things[0].Count += 1;
Debug.WriteLine(this.Things[0].ToString());
}
}
我的问题是如何编写绑定代码,以便ListBox显示Things对象中包含的Things,并且当Thing对象的DependencyProperty Count更改时,ListBox中的Thing对象的显示会自动更新。
具体来说,我将如何进行以下XAML以使上述情况发生 也就是说,当我向Things对象添加一个新的Thing对象时,会向ListBox添加一个新项。当我用Things对象更改现有项目时,更改将显示在ListBox中。
在Windows Phone 7中,MainPage包含一个ListBox:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel>
<ListBox x:Name="ThingsBox" />
<Button x:Name="Action" Content="Action" Click="Action_Click"/>
</StackPanel>
</Grid>
</Grid>
答案 0 :(得分:0)
如果你想以任何方式使用绑定,你应该考虑遵循更多的MVVM模式,
即使没有它,您也可以绑定到您的对象。你应该能够做类似以下的事情
//code behind main page
Things ThingCollection { get; set }
//in xaml
<MainPage x:Name="_mainPage">
<ListBox ItemsSource="{Binding ThingsCollection}" />
</MainPage>
这是一个简单的例子,但基本上是在xaml中做什么。
答案 1 :(得分:0)
首先,我建议为您的模型使用普通旧对象(实现INotifyPropertyChanged
)。依赖对象的使用是过度的。请参阅此相关问题:
INotifyPropertyChanged vs. DependencyProperty in ViewModel
为了将对象集合绑定到列表,以便在添加/删除对象时UI自动更新,您应该创建ObservableCollection
并将其设置为ItemsSource
ListBox
:
ObservableCollection<Thing> ThingsCollection { get; set }
<MainPage x:Name="_mainPage">
<ListBox ItemsSource="{Binding ThingsCollection}" />
</MainPage>
这里的关键是ObservableCollection
实现INotifyCollectionChanged
,它会在集合发生变化时引发事件。 ListBox
处理这些事件以保持UI同步。