下のようなユーザーコントロール(csとxaml)を用意しました。
一部省略してあります。
このwpfのコードをベースにして作成しています。
listview.xaml
1 2<ListView x:Name="listview_item" HorizontalAlignment="Center" ItemsSource="{Binding Mode=OneWay}" 3 4 Height="222" Margin="0,-2,0,3" Grid.Column="3" VerticalAlignment="Top" Width="456" > 5 <ListView.ContextMenu> 6 <ContextMenu Name="ZoneIformationList" StaysOpen="true" Background="WhiteSmoke"> 7 <ContextMenu.BitmapEffect> 8 <BitmapEffectGroup/> 9 </ContextMenu.BitmapEffect> 10 11 <MenuItem Header="Edit" Name="EditNutritionContextMenu" Click="EditNutritionContextMenu_OnClick"/> 12 <MenuItem Header="Remove" Name="RemoveNutritionContextMenu" Click="RemoveNutritionContextMenu_OnClick"/> 13 </ContextMenu> 14 </ListView.ContextMenu> 15 16 <!--<ListView.ItemContainerStyle> 17 <Style TargetType="{x:Type ListViewItem}"> 18 <Setter Property="BorderBrush" Value="LightGray" /> 19 <Setter Property="BorderThickness" Value="0,0,0,1" /> 20 <Setter 21 Property="Tag" 22 Value="{Binding DataContext, RelativeSource={RelativeSource AncestorType=ListView}}" /> 23 24 <Setter Property="ContextMenu"> 25 <Setter.Value> 26 <ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}"> 27 <MenuItem 28 Header="Select" 29 Command="{Binding SelectCommand}" 30 CommandParameter="{Binding PlacementTarget.Content, RelativeSource={RelativeSource AncestorType=ContextMenu}}" /> 31 </ContextMenu> 32 </Setter.Value> 33 </Setter> 34 </Style> 35 </ListView.ItemContainerStyle>--> 36 <ListView.View> 37 38 <GridView> 39 <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" /> 40 <GridViewColumn DisplayMemberBinding="{Binding Timer}" Header="Timer"/> 41 <GridViewColumn DisplayMemberBinding="{Binding Opsion}" Header="Opsion"/> 42 43 44 </GridView> 45 </ListView.View> 46 </ListView> 47
listview.xaml.cs
1 2 using System; 3using System.Collections.Generic; 4using System.Linq; 5using System.Text; 6using System.Threading.Tasks; 7using System.Windows; 8using System.Windows.Controls; 9using System.Windows.Data; 10using System.Windows.Documents; 11using System.Windows.Input; 12using System.Windows.Media; 13using System.Windows.Media.Imaging; 14using System.Windows.Navigation; 15using System.Windows.Shapes; 16 17namespace aaaaa 18{ 19 /// <summary> 20 /// listview.xaml の相互作用ロジック 21 /// </summary> 22 public partial class listview : UserControl 23 { 24 public System.Collections.ObjectModel.ObservableCollection<Listview_Column> Listview_Column { get; set; } 25 public static List<Listview_Column> listview_array = new List<Listview_Column>(); 26 27 public listview() 28 { 29 InitializeComponent(); 30 } 31 32 private void Button_Click(object sender, RoutedEventArgs e) 33 { 34 listview_array.Add(new Listview_Column() 35 { 36 Name="a", 37 Age="1", 38 Opsion="0" 39 }); 40 listview_item.ItemsSource = listview_array; 41 } 42 43 44 45 46 private void Button_Click_1(object sender, RoutedEventArgs e) 47 { 48 listview_array.Add(new Listview_Column() 49 { 50 Name = "a", 51 Age = "1", 52 Opsion = "0" 53 }); 54 listview_item.ItemsSource = listview_array; 55 } 56 57 public static void ListUpDate() 58 { 59 listview_array.Add(new Listview_Column() 60 { 61 Name = "a", 62 Age = "1", 63 Opsion = "0" 64 }); 65 //listview_item.ItemsSource = listview_array; 66 //エラー: 67 //静的でないフィールド、メソッドまたはプロパティでオブジェクト参照が必要です。 68 } 69 } 70 71 72 73 74 75 public class Listview_Column 76 { 77 public string Name { get; set; } 78 public string Age { get; set; } 79 public string Opsion { get; set; } 80 81 } 82}
List型の変数を利用してlistviewを初期化しています。(かならずList型を使うこととします)
buttonのclickのイベントの関数の中ではlistview_itemにアクセスできて、
ListUpDate()ではlistview_itemにアクセスできず、オブジェクト参照が必要とエラーが出てしまいます。
ListUpDate()はほかのWindowのクラスでlistview.ListUpDate()と宣言して利用するつもりです。
windowからモーダレスのdialogを出現させて、そのdialogから親元のwindowのlistviewを更新して再表示させようとしています。
ListUpDate()内におけるlistview_itemにアクセスできないエラーでオブジェクト参照が必要とあったのですが、listUpDate内で
listview lv= new listview(); lv.listview_item.ItemsSource = listview_array;
としたのですが、listviewが更新されていませんでした。
listUpDate()からlistview_itemにアクセスできるようになり、listviewを先ほど征ったように更新できるようにしたいです。回答お願いします。

回答1件
あなたの回答
tips
プレビュー