[英]Updating ItemsControl when new Item is added to the ItemsSource
好吧,這似乎是一件非常容易的事情,但我一直在尋找一個小時以上的解決方案,並且無法想出任何東西。 在我的WP8應用程序中,我有一個ItemsControl
,我在程序上綁定數據。 綁定數據是靜態ObservableCollection
。 當我通過另一個頁面向此集合添加新項目時,我希望在我的ItemsControl
上看到新項目。 將新項添加到集合后, ItemsControl
仍然顯示為空,即使其ItemsSource
似乎包含項。
編輯:我寫的代碼如下所示
ItemsControl在頁面上定義如下:
<ItemsControl Name="MyItemsControl"
Grid.Row="4"
Grid.ColumnSpan="2">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding someData}"
Margin="24"
Foreground=""/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
綁定處理如下:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
MyItemsControl.ItemsSource = SomeClass.myObservableCollection;
}
靜態集合所在的類:
class SomeClass
{
public static ObservableCollection<MyData> myObservableCollection { set; get;}
}
邁德特:
class MyData
{
public string someData { set; get; }
}
我認為問題是你的ObservableCollection為null,如果你想使用屬性,它可能如下所示:
class SomeClass
{
private static ObservableCollection<MyData> myObservableCollection = new ObservableCollection<MyData>();
public static ObservableCollection<MyData> MyObservableCollection
{
get { return SomeClass.myObservableCollection; }
set { SomeClass.myObservableCollection = value; }
}
}
然后:
MyItemsControl.ItemsSource = SomeClass.MyObservableCollection;
SomeClass.MyObservableCollection.Add(new MyData() { someData = "Romasz" });
當然,它可以更容易(如果你不需要財產):
public static ObservableCollection<MyData> myObservableCollection = new ObservableCollection<MyData>();
你可以移動MyItemsControl.ItemsSource = SomeClass.MyObservableCollection;
對於您的頁面的構造 - 每次導航到頁面時都不需要這樣做。
並從您的XAML代碼中刪除Foreground=""
。
編輯 - 評論后
很難說我哪里可以成為一個問題,因為我沒有看到你的整個代碼,但請考慮這個適合我的例子:
在XAML中:
<ItemsControl Name="MyItemsControl" Grid.Row="3">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding someData}" Margin="24"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
代碼背后:
class SomeClass
{
public static ObservableCollection<MyData> myObservableCollection = new ObservableCollection<MyData>();
}
class MyData
{
public string someData { set; get; }
}
public MainPage()
{
InitializeComponent();
MyItemsControl.ItemsSource = SomeClass.myObservableCollection;
SomeClass.myObservableCollection.Add(new MyData() { someData = "First" });
SomeClass.myObservableCollection.Add(new MyData() { someData = "Second" });
}
以下是更新數據的示例
private void UpdateData()
{
try
{
MainWindow.cmdSel = new SqlCommand("SELECT Name FROM Cities order by ID asc", MainWindow.conn);
DataSet dtst = new DataSet();
SqlDataAdapter adpt = new SqlDataAdapter();
try
{
adpt.SelectCommand = MainWindow.cmdSel;
adpt.Fill(dtst, "Cities");
lstCity.DataContext = dtst;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
在ListItem中添加一些項目后
private void AddCity(object sender, MouseButtonEventArgs e)
{
if (TxtCity.Text != string.Empty)
{
Add(TxtCity.Text);
UpdateData(); ////Here I am updating my listitem
}
else
{
MessageBox.Show("Add city");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.