WPF DataContext и ICommand в MVVM - PullRequest
       0

WPF DataContext и ICommand в MVVM

0 голосов
/ 29 июня 2011

Я подключил свой щелчок по кнопке в своем файле xaml, затем я хотел привязать некоторые текстовые поля, содержащиеся в StackPanel, к моей коллекции.

Если я установил DataContext для StackPanel, нажатие кнопки больше не работает; однако, если я устанавливаю DataContext для каждого TextBox, нажатие кнопки работает как прежде. Я понятия не имею, почему ...

эта разметка работает

<StackPanel>

    <TextBlock>Product Name</TextBlock>            
    <TextBox Width="200" DataContext="{Binding Path=ProductCollection, Mode=TwoWay}" Text="{Binding Path=ProductName, Mode=TwoWay}"></TextBox>

    <TextBlock>Unit Price</TextBlock>
    <TextBox Width="200" DataContext="{Binding Path=ProductCollection, Mode=TwoWay}" Text="{Binding Path=UnitPrice, Mode=TwoWay}"></TextBox>

    <Button Margin="20" x:Name="UpdateProduct" Content="Update Product" Command="{Binding AmendProduct}" />                


</StackPanel>

эта разметка не работает - я переместил DataContext на панель стека.

<StackPanel DataContext="{Binding Path=ProductCollection, Mode=TwoWay}">       

   <TextBlock>Product Name</TextBlock>            
   <TextBox Width="200" Text="{Binding Path=ProductName, Mode=TwoWay}"></TextBox>

   <TextBlock>Unit Price</TextBlock>
   <TextBox Width="200" Text="{Binding Path=UnitPrice, Mode=TwoWay}"></TextBox>

   <Button Margin="20" x:Name="UpdateProduct" Content="Update Product" Command="{Binding AmendProduct}" />

</StackPanel>

Ответы [ 2 ]

3 голосов
/ 29 июня 2011

когда вы помещаете DataContext в StackPanel, он ожидает, что AmendProduct будет в PathCollection (т. Е. Фактический путь, который он ожидает, - ProductCollection.AmendProduct).

, поэтому он работает в первом. DataContext работает на основе Scope (т.е. heirarchy)

0 голосов
/ 29 июня 2011

Для MVVM люди обычно предоставляют целый класс, предназначенный для того, чтобы быть «моделью представления» для всего элемента управления, поэтому обычно вы не устанавливаете новый DataContext внутри элемента управления. Модель представления будет отображать именно те свойства, которые необходимы представлению, например ProductName, UnitPrice и т. Д.

Элемент управления, который создал этот элемент, который вы показываете, может установить DataContext для этого элемента управления. (И вы можете сделать то же самое рекурсивно для других пользовательских элементов управления, которые вы создаете.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...