0

listView の初期化に問題があります。listView の.xaml部分は次のとおりです。

<ListView x:Name="categoryListView" HorizontalAlignment="Left" Width="129" Height="180" 
              ItemsSource="{Binding Path=RecordModel.CategoryList}" 
              DisplayMemberPath="RecordModel.CategoryList" 
              SelectedValue="{Binding Path=RecordModel.RecordTitle}"
              VerticalAlignment="Top">

RecordModel.CategoryListに文字列パスのリストがありますが、ウィンドウの初期化時にリストを変更する必要があります。ビューモデルの一部を以下に示します。listView が開始時に変更されたリスト項目を取得するように、リストを変更するコードをどこに追加できますか?

public class MainWindowViewModel : ViewModelBase
{
...
private RecordModel _recordModel;
private ICommand _addCategoryCommand;
...

public MainWindowViewModel()
{
 _recordModel = new RecordModel();
}
public RecordModel RecordModel
{
  get { return _recordModel; }
  set { _recordModel = value; }
}
...
public ICommand AddCategoryCommand
{
 get
  {
   if (_addCategoryCommand == null)
       _addCategoryCommand = new AddCat ();
     return _addCategoryCommand;
  }
}

public class AddCat : ICommand
{
  public bool CanExecute(object parameter) { return true; }
  public event EventHandler CanExecuteChanged;
  public void Execute(object parameter)
  {
    MainWindowViewModel mainWindowViewModel = (MainWindowViewModel)parameter;
    ...
    //Do things with mainWindowViewModel and the variables it has
  }
...
4

1 に答える 1

2

これが、ViewModel が存在する理由です。つまり、値を Model からバインディングにより適切な値に透過的に変換できるようにするためです。

CategoryListでプロパティを公開し、MainWindowViewModelそれに直接バインドする必要があります。RecordModel.CategoryList次に、RecordModelプロパティ セッターで値を処理することにより、値を設定できます。

public class MainWindowViewModel : ViewModelBase
{
    private RecordModel _recordModel;

    public MainWindowViewModel()
    {
        RecordModel = new RecordModel(); // set the property not the field
    }

    public RecordModel RecordModel
    {
        get { return _recordModel; }
        set {
            _recordModel = value;
            // populate CategoryList here from value.CategoryList
        }
    }

    public UnknownType CategoryList { get; }
}
于 2013-01-22T15:23:50.320 に答える