前提・実現したいこと
C#のWPFでListboxとボタンをセットとして、ボタンを押すとListboxに値が追加されるものを
observableColectionを使いバインドして、実現する。
またobservableCollectionに値が追加または削除されると、その状態に応じてボタンのenableを変えたりしたい、それをバインドを用いる形で達成したい
(例えば、observavleCollectionの要素数が2以上ならenableをtrueにしてそれ以外はfalseにするなど)
発生している問題・エラーメッセージ
バインドはされて、Listboxに値は追加されるが、setterを通るようにして(通らなくてもいいが)変更を通知できるようにしたい
該当のソースコード
Xaml
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Width="300" Height="322"> <StackPanel> <ListBox HorizontalAlignment="Left" Height="54" Margin="20,0,0,0" Width="172" ItemsSource="{Binding FileName}" SelectionMode="Extended"/> <Button Content="Button" HorizontalAlignment="Left" Height="33" Margin="32,0,0,0" Width="85" Command="{Binding FileNameAddCommand}"/> </StackPanel> </Window>
ViewModel
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Prism.Mvvm; using Prism.Commands; using System.Collections.ObjectModel; namespace WpfApplication1 { class MainWindowViewModel : BindableBase { private ObservableCollection<string> fileName = new ObservableCollection<string>{"1","2","3"}; public ObservableCollection<string> FileName { get { return fileName; } set { this.SetProperty(ref this.fileName, value); }←ここを通って変更通知できるようにしたい } private DelegateCommand fileNameAddCommand; public DelegateCommand FileNameAddCommand { get { return fileNameAddCommand = fileNameAddCommand ?? new DelegateCommand(FileNameAdd); } } private void FileNameAdd() { FileName.Add("5"); } } }
Main
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApplication1 { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.DataContext = new MainWindowViewModel(); } } }
試したこと
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー