2016-05-15 8 views
0

WPFバインディングを初めて使用しています。 ItemSourceの項目の1つが独自のdependecnyプロパティを変更すると、リストビューが自動的に更新される方法はありますか?私はそれをFreezableCollectionと一緒にしようとしていました。ListViewアイテムの自動アップデート

私のコードを以下に示します。目的は、テキストボックスが変更されたときにリストボックスを更新することです。

MainWindow.xaml

<Grid x:Name="mainDataGrid"> 
    <StackPanel Orientation="Horizontal"> 
     <ListView x:Name="membersListView" ItemsSource="{Binding}" MinWidth="100"/> 
     <StackPanel> 
      <TextBox x:Name="selectedItemTextBox" Text="{Binding ElementName=membersListView, Path=SelectedItem.Name, Mode=TwoWay}" MinWidth="200"/> 
     </StackPanel> 
    </StackPanel> 
</Grid> 

MainWindow.cs

public partial class MainWindow : Window 
{ 
    ViewModel vm; 
    public MainWindow() 
    { 
     InitializeComponent(); 
     vm = new ViewModel(); 
     vm.Add(new Model() { Name = "Name1" }); 
     vm.Add(new Model() { Name = "Name2" }); 
     this.DataContext = vm; 
    } 
} 
public class Model : Freezable 
    { 
     public String Name 
     { 
      get { return (String)GetValue(NameProperty); } 
      set { SetValue(NameProperty, value); } 
     } 
     public override string ToString() 
     { 
      return Name; 
     } 
     // Using a DependencyProperty as the backing store for Name. This enables animation, styling, binding, etc... 
     public static readonly DependencyProperty NameProperty = 
      DependencyProperty.Register("Name", typeof(String), typeof(Model), new PropertyMetadata("")); 

     protected override Freezable CreateInstanceCore() 
     { 
      return new Model(); 
     } 
    } 
    public class ViewModel : FreezableCollection<Model> 
    { 

    } 

答えて

1

[OK]を、 は今、あなたのListViewコントロールを使用すると、「ToStringメソッド(オーバーライドしなければならなかった理由です、あなたのモデルの文字列表現を示しています) "メソッド... Nameプロパティを表示するために理解できないためです。

は今何が起こるかは、「それはToStringメソッド()

すると、あなたが設定している場合で見ているので...あなたのTextBoxがよくNameプロパティを変更しますが、あなたのリストボックスには、「名前」は、プロパティが変更されたことを知らないということですこのモードでは、使用してNameプロパティを変更した場合という

<ListView x:Name="membersListView" ItemsSource="{Binding}" DisplayMemberPath="Name" MinWidth="100"/> 

注:このような名前 『名前『をが、それは()ToStringメソッドを見てではなく、しません』「ためにあなたのリストビューの』 DisplayMemberPath ...テキストボックスの場合、テキストボックスは "名前"プロパティの値を失うまで直ちに更新しませんだから、これにテキストボックスのテキストの結合を変更修正するために、を集中:

<TextBox x:Name="selectedItemTextBox" Text="{Binding ElementName=membersListView, Path=SelectedItem.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" MinWidth="200"/> 

私はあなたがテキストボックスのテキストを変更し始めると、Nameプロパティが瞬時に更新されていることを確認するために、「UpdateSourceTrigger =のPropertyChanged」追加しました。

:)助けてください。

関連する問題