Silverlight 4 MVVM: невозможно связать данные по ICommand - PullRequest
1 голос
/ 24 сентября 2010

Я создал пользовательский элемент управления Silverlight.Разметка выглядит следующим образом:

<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Width="Auto" Margin="5">
    <Button Content="OK" Margin="0,0,5,5" MinWidth="50" Command="{Binding OKCommand}"  />
</StackPanel>

Код ниже объявляет свойство зависимости 'OKCommand' как:

public ICommand OKCommand
{
    get
    {
        return (ICommand)GetValue(OKCommandProperty);
    }
    set
    {
        SetValue(OKCommandProperty, value);
    }
}

public static readonly DependencyProperty OKCommandProperty
    = DependencyProperty.Register("OKCommand", typeof(ICommand), typeof(TestUserControl), new PropertyMetadata(null, OKCommandProperty_PropertyChangedCallback));

private static void  OKCommandProperty_PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{      
}

Теперь я хочу использовать пользовательский элемент управления на другой странице, где находится представление& ViewModel определяет команду, к которой я хочу привязать OKCommand.Разметка XAML такова:

<local:TestControl OKCommand="{Binding Path=TestControlOk}"/>

Однако, когда я нажимаю кнопку, она ничего не выполняет.Любые подсказки относительно того, что я делаю здесь неправильно.

1 Ответ

1 голос
/ 24 сентября 2010

Вам нужно показать модель представления, которая содержит свойство TestControlOk, чтобы мы могли определить, является ли это частью проблемы.


UserControls не регистрируют себя в качестве контекста данных автоматически, поэтому привязка внутри пользовательского элемента управления не будет иметь ничего для привязки. У вас есть

this.DataContext = this;

где-нибудь в коде UserControl, чтобы ваша первая привязка действительно работала?

Или вы можете сделать что-то вроде этого:

<UserControl .....
    x:Name="MyUserControl">
    <StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Width="Auto" Margin="5">
        <Button Content="OK" Margin="0,0,5,5" MinWidth="50" 
            Command="{Binding OKCommand, ElementName=MyUserControl}"  />
    </StackPanel>
</UserControl>

Обратите внимание на часть ElementName= привязки, указывающую на корневой элемент UserControl в вашем XAML.

...