0

このバインディングは機能しないため、何かが欠けています。これは学習目的のためです。これを改善する方法がわかっている場合は、教えてください。しかし、それ以外にも、なぜこれが機能しないのかを知りたいと思っています。

私のMainWindow中にはCheckBox、コマンドがバインドされた があります: checkCommand

RootViewModel.cs:

 public Command checkCommand { get; set; }


 public RootViewModel()
        {
 checkCommand = new Command(mark);
        }

private void mark()
        {          
            myThingsCollection[0].marked= true;               
        }

このコマンドは正常に機能しており、 の状態も に変更しますmarked(trueこれを でテストしましたMessageShowBox)。

以前に UC をObsevableCollection<UC>( ) に追加し、 MainWindow.csでこの方法でmyThingsCollectionバインドしました。ItemsControl

<ItemsControl ItemsSource="{Binding myThingsCollection}">
                        <DataTemplate> <!--I've ommited some parts here--!>
                           <local:UC/>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>

UC は正しく表示されます。

markedのプロパティですUCViewModel:

class UCViewModel
    {
        #region Implementation of INotifyPropertyChanged


        private bool _marked;
        public bool marked
        {
            get
            {
                return _marked;
            }
            set
            {
                _marked= value;
                OnPropertyChanged("marked");

            }
        }
    }

そのUserControl( UC) には、次のCheckBoxようにバインドする があります。

 <CheckBox Content="Hello!" IsChecked="{Binding marked}"/>

そして、DataContextこのように設定します(UC.cs.xamlの背後にあるコードで)

        public UC()
    {
        UCViewModel context = new UCViewModel();
        DataContext = context;

        InitializeComponent();

    }

しかし、うまくいきません。何が欠けているのかわからない。ところで、これはこの問題に対する適切なアプローチではないと確信しています。もっと簡単な方法はありますか? ありがとう

4

2 に答える 2

0

ビュー モデルの実装に確信がある場合は、バインディング構文を変更してみてください。

    IsChecked="{Binding path=marked, Mode=TwoWay}"
于 2013-06-06T09:40:25.443 に答える