2017-11-08 10 views
0

を更新していないリストにバインド。ビューが最初に読み込まれたときにテキストが正しく表示されるため(そして両方向で確実に動作するようにハードコードするときに)、テキストが正しく表示されるため、私のコンバータが機能することはわかっています。私はそれがログに上げ、私のログので、GUIは、リストの変更が通知されていることを前提としていますが、私は直接通知をテストする方法がわからないです:内容は、私はこのような私の見解ではボタンがあり

private List<AppList> _appList; 
    public List<AppList> appList 
    { 
     get { return _appList; } 
     set { Set(ref _appList, value); Log.Debug("appList changed"); } 
    } 

私は問題はによって引き起こされていることを前提としていボタンはItemsControlにバインドされているリストの一部ですが、リスト内のオブジェクトのプロパティを更新する方法を理解することはできません。

テストとして、ボタンがクリックされたときに発生するイベントを作成しました(ボタンをクリックするとボタン自体の内容が変更されるはずです)。RaisePropertyChangedを使用してリストとプロパティにバインドされた変更を通知しようとしましたコンテンツ自体。どちらもうまくいかなかった。

それはItemsControlにのためのWPFを助け場合は、次のとおりです。

<ScrollViewer Style="{StaticResource ScrollviewerStyle}" Grid.Row="2"> 
     <ItemsControl ItemsSource="{Binding appList}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Border Style="{StaticResource ItemsControlBorderStyle}"> 
         <Grid Width="540"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="40"/> 
          </Grid.RowDefinitions> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="50"/> 
           <ColumnDefinition Width="100"/> 
           <ColumnDefinition Width="50"/> 
           <ColumnDefinition Width="255"/> 
           <ColumnDefinition Width="70"/> 
          </Grid.ColumnDefinitions> 
          <Label Style="{StaticResource LabelStyle}" Content="Alias:" Grid.Row="0" Grid.Column="0"/> 
          <TextBox Style="{StaticResource TextBoxStyle}" Text="{Binding alias, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="100" Grid.Row="0" Grid.Column="1"/> 
          <Label Style="{StaticResource LabelStyle}" Content="Path:" Grid.Row="0" Grid.Column="2"/> 
          <TextBox Style="{StaticResource TextBoxStyle}" Text="{Binding path, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="255" Grid.Row="0" Grid.Column="3"/> 
          <Button Style="{StaticResource DeleteButton}" Content="{Binding toDelete, Converter={StaticResource DeleteButtonContentConverter}}" Command="{Binding DeleteCommand}" Grid.Row="0" Grid.Column="4"/> 
         </Grid> 
        </Border> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </ScrollViewer> 
+0

AppListクラスはINotifyPropertyChangedを実装していますか? – mm8

答えて

1

AppListクラスはINotifyPropertyChangedインタフェースを実装する必要がありますし、toDeleteプロパティが新しい値に設定されるたびにPropertyChangedイベントを発生させます。

プロパティが設定されるたびにコンバーターが呼び出され、ButtonContentはコンバーターが返すものに設定する必要があります。

+0

私はMVVM Lightを使用しているためObservableObjectを実装しましたが、INotifyPropertyChangedが実装されていました。 – Exitialis