3

x:Referenceコードでバインディングのマークアップ拡張機能を設定することは可能ですか?

例えば:

{Binding SelectedItem, Source={x:Reference ComboList}}

だから私はこのようなバインディングを作成します:

Binding b = new Binding("SelectedItem");
b.Source = //What to put here??

私は以前使用していましたが、この質問ElementNameで言及されているように、NameScope にいくつか問題がありました。このバインディングは、作成した UserControl の内部にある ComboBox に設定されているためです。 ..ElementName

ありがとう!

4

1 に答える 1

3

コメントを回答に変換する:

{x:Reference} は XAML コンストラクトです。C# コードでは使用できません

UserControl外部からのプロパティを持つために内部に何かが必要な場合は、そのプロパティをそれ自体のDependencyProperty内部に作成しUserControl、次の方法で要素をそのプロパティにバインドする必要がありますRelativeSource

UserControl のコード ビハインド:

 public static readonly DependencyProperty SomeProperty = DependencyProperty.Register("Some", typeof (SomeValue), typeof (YourUserControl), new PropertyMetadata(default(SomeValue)));

        public SomeValue Some
        {
            get { return (SomeValue) GetValue(SomeProperty); }
            set { SetValue(SomeProperty, value); }
        }

UserControl ビジュアル ツリー内のどこか:

<TextBox Text="{Binding Some, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"/>
于 2013-03-20T17:17:57.097 に答える