グリッドを持つUserControlBase
があります。グリッドにはアクションを含む列が含まれています。ICommandがSilverlightユーザーコントロールで動作しません
<sdk:DataGridTemplateColumn Header="Action">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<Button Style="{StaticResource DataGridButton}" Command="{Binding Source={StaticResource NewsViewModel}, Path=ModifyNewsCommand}" Content="Modify" />
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
私の問題は私のCommand
です。それは私の最初の問題である私に技術的なエラーを投げている、私はこのアプリケーションが本当のエラーメッセージをスローする方法を知らない。
protected void RegisterMessages()
{
Messenger.Default.Register<string>(this, "NewNewsBtn_Click", NewNewsBtn_Click);
Messenger.Default.Register<string>(this, "ModifyNewsBtn_Click", ModifyNewsBtn_Click);
}
そして、私のコンストラクタで:
public NewsWindow(int underlyingId)
{
InitializeComponent();
this.RegisterMessages();
viewModel = new NewsViewModel(underlyingId);
ucNewsPanel.DataContext = viewModel;
}
マイビューモデル(NewsViewModel)
public ICommand ModifyNewsCommand
{
get
{
return new RelayCommand<string>(e =>
{
Messenger.Default.Send(string.Empty, "ModifyNewsBtn_Click");
});
}
}
は何私のユーザーコントロールの背後にあるコードで
は、私がイベントを登録しました私のModifyNewsBtn
の間に私の
NewNewsBtn
が働いていて、ここで変ですそうではありません。
このボタンはグリッドの外側にあるため、動作している理由が異なる場合があります。
<Button x:Name="NewNewsBtn" MaxHeight="50" MaxWidth="100" Command="{Binding Path=NewNewsCommand}" Content="Add New" />
は、なぜあなたはあなたのバインディングの代わりに、ただのDataContextにアクセスするにはStaticResourceを使用します:あなたはsilverlight5を使用している場合は、
AncestorBinding
を使用することができますか?これがあなたのボタンが動作しない原因のように私に見えます。 – Martin私は – ViVi
@Martin **「{パス= ModifyNewsCommand、バインディングソース= {StaticResource NewsViewModel}}」=コマンド**この部分は間違っていると思います - StaticResourceを削除し、ちょうどパスを残す場合は、それが機能していません。それは私にエラーを投げているわけではありませんが、方法に入っていません。 –