2010-09-24 105 views
1

我已經創建了一個Silverlight用戶控件。標記是:Silverlight 4 MVVM:無法數據綁定ICommand

<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) 
{  
} 

現在我想用另外的頁面,這是查看&視圖模型定義了用戶控制我想要將OKCommand綁定到的命令。 XAML標記是這樣的:

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

但是,當我點擊按鈕它不會執行任何操作。任何關於我在這裏做錯的線索。

+0

你是否已經在命令代碼中注意到代碼執行是否使它在那裏? – Aren 2010-09-24 16:17:02

回答

1

您需要顯示包含TestControlOk屬性的視圖模型,以便我們可以判斷這是否是問題的一部分。


用戶控件沒有註冊自己的數據上下文自動讓用戶控制裏面的結合不會有什麼結合。你有

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> 

注意綁定指向你的XAML根用戶控件元素的ElementName=一部分。

+0

非常好!這也解決了我的問題。我的投票+1 – imdadhusen 2012-02-27 12:55:24