コンストラクタではなく、XAMLのグリッドにDataContextを設定するにはどうすればよいですか?ここでSilverlight - コンストラクタではなくXAMLでDataContextを設定していますか?
は、私はコンストラクタでそれを行う方法である(LayoutRootは、XAMLグリッドXAMLで定義されている):
this.LayoutRoot.DataContext = this.HPVM;
私は右のXAMLでそれを行うことを好むだろうが、私はどのように知りません。 XAMLのHPVMオブジェクトを参照してください。 HPVMは、USerControlクラスのパブリックプロパティです。
これは上で示したようにうまく動作しますが、XAMLでUserControlクラスのプロパティをどのようにするかを常に知りたいだけでなく、常にコードで行う必要があります。ここで
は、関連するすべてのコードです:
<UserControl x:Class="SilverlightApplication1.SLHolePattern" x:Name="HolePatternsControl"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:controls="clr-namespace:Microsoft.Windows.Controls;assembly=Microsoft.Windows.Controls"
xmlns:local="clr-namespace:SilverlightApplication1"
xmlns:GeoPatterns="clr-namespace:GeoPatterns"
Height="700">
<UserControl.Resources>
...
そしてここでは、DataContextのが現在設定されている私のコンストラクタです:
namespace SilverlightApplication1
{
public partial class SLHolePattern : UserControl, INotifyPropertyChanged
{
public HolePatternsViewModel HPVM;
public SLHolePattern()
{
InitializeComponent();
this.HPVM=new HolePatternsViewModel();
this.LayoutRoot.DataContext = this.HPVM;
...more code here
}
それはすべてが正常に動作しますが、私はどれだけに学びたいですコードではなく、XAMLでDataContextを設定します。で、XAMLでクラスのインスタンスを作成>フォームなど
-
XAMLでViewModelクラスをインスタンス化すると、コードビハインドコンストラクタでも参照できますか?私が尋ねる理由は、フォームがユーザに表示される前に、現在、コンストラクタのViewModelにいくつかの値を設定しているということです。 – MattSlay
はい、できます。次のようにしてください: var aCustomer = this.Resources ["Cust"] as Customer; aCustomer.Name = "abc"; – Klinger
x:Name属性を追加するのを忘れました。 x:KeyはXAML内で動作し、x:Nameはオブジェクトをコードに見えるようにします。 – Klinger