私はいくつかのXAMLコードをViewModelのプロパティにバインドしようとしています。INotifyPropertyChanged 'Double' binding
<Grid Visibility="{Binding HasMovies, Converter={StaticResources VisibilityConverter}}">
...
</Grid>
私のViewModelには、このような設定です:CPで
MovieListViewModel()
{
HasMovies = CP.Connection.HasMovies;
}
:
public bool HasMovies
{
get { return MovieList != null && MovieList.Count > 0; }
}
private ObservableCollection<Movie> _movies;
public ObservableCollection<Movie> MovieList
{
get { return _movies; }
set
{
_movies = value;
RaisePropertyChanged("MovieList");
RaisePropertyChanged("HasMovies");
_movies.CollectionChanged += MovieListChanged;
}
}
private void MovieListChanged(object sender, NotifyCollectionChangedEventArgs e)
{
RaisePropertyChanged("HasMovies");
}
private bool _hasMovies;
public bool HasMovies
{
get { return _hasMovies; }
set { _hasMovies = value; RaisePropertyChanged("HasMovies"); }
}
のViewModelのコンストラクタで、私はHasMoviesリンクを設定します
私は間違って何をしていますか?このバインディングを変更して現在の状態がCP.Connection.HasMovies
に反映されるようにするにはどうすればよいですか?
私が探しているもののように見えますが、私はかなりの数の場所でこのプロパティを使用するので、オブジェクトに直接結合する最初のアイデアは、良いアイデアのように聞こえます。このバインディングをXAMLで行う方法の例がありますか? –
PropertyChangedイベントはコレクションにアイテムを追加したり削除したりするときに呼び出されません**ので、それはひどいばかげた解決策です。 –
@willmel:バインディングのためのコードのようなパスを使うことができます。接続オブジェクトを 'Connection'というプロパティとして公開すると、バインディングは' {Connection Connection.HasMovies、Converter = ...} '。 –