ListViewに異なるボタンを持つユーザーコントロールがあります。私が観測可能なリストをインスタントして、いくつかのアイテムを追加すれば、私は更新することができます。しかし、ボタンを押した後にインスタンス化すると、GUIは更新されません。WPF - MVVMでListViewを更新できません
class ModelViewA {
private ObservableCollection<ObjectA> myList;
public ObservableCollection<ObjectA> MyItems {get {return myList;} set {myList = value;}}
private void OnConfigCommand(int numbers)
{
myList = new ObservableCollection<ObjectA>();
for(int i = 0; i < numbers; i++)
{
myList.Add(new Object() { Name="Name" });
}
}
}
class ObjectA : INotifyPropertyChanged {
private string name;
public string Name
{
get { return name; }
set
{
if (name != value)
{
name = value;
RaisePropertyChanged("Name");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
<ListView x:Name="m_List" ItemsSource="{Binding Path=MyItems,UpdateSourceTrigger=PropertyChanged}" DockPanel.Dock="Top" BorderThickness="2" BorderBrush="DimGray" Margin="0,5,0,0" Height="250">
<ListView.View>
<GridView AllowsColumnReorder="False" >
<GridViewColumn Header="Name" Width="60" DisplayMemberBinding="{Binding Path= Name}"/>
<GridViewColumn Width="80" DisplayMemberBinding="{Binding ButtonName}" >
<GridViewColumn.Header>
<Button Width="76" Height="110" Content="ButtonName" Tag="0" ToolTip="Click here to import data from *.ini file." Command="{Binding OnConfigCommand}" CommandParameter="0"/>
</GridViewColumn.Header>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
問題を確実に再現する良い[mcve]がなければ、良い回答を投稿することはできません。つまり、_後にインスタンス化すると、後で 'MyItems'プロパティを設定した後、バインドが設定された後、' ModelViewA'がバインドされているため、バインドされた値が更新されることは期待できません。クラスは 'INotifyPropertyChanged'を実装していません –
ええ、それは難しいと知っていますが、コード全体を投稿することはできません。はい、それは私が意味するものでした。私もそれを試してみましたが、それもうまくいきませんでした。しかし、あなたの助けに感謝します。バインディングの前にGUIを変更してアイテムを設定する方が良いでしょう。 – user3857995
私は、ListViewのUpdateSourceTriggerが問題の一部であると思われます。そこに別の設定を試しましたか? (Peterが言ったことに加えて) – Fildor