簡體   English   中英

將新項添加到ItemsSource時更新ItemsControl

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM