2013-03-19 4 views
1

В основном я хочу преобразовать что-то, что я сделал в xaml, в C#. Это связано со следующим вопросом: Bind a string in xaml to a propertyпреобразование сборной коллекции с контейнером для коллекции из xaml в C#

Вот почему прокси нужен и используется в моем случае: класс http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/

Proxy, чтобы позволить мне связываться с CollectionContainer:

public class BindingProxy : Freezable 
{ 
    #region Overrides of Freezable 

    protected override Freezable CreateInstanceCore() 
    { 
     return new BindingProxy(); 
    } 

    #endregion 

    public object Data 
    { 
     get { return (object)GetValue(DataProperty); } 
     set { SetValue(DataProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for Data. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty DataProperty = 
     DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null)); 
} 

Proxy определяется ресурсами моего элемента управления:

<UserControl.Resources> 
    <global:BindingProxy x:Key="proxy" Data="{Binding }" /> 
</UserControl.Resources> 

Xaml код, который я в конечном счете, хотят, чтобы преобразовать в C#:

<ComboBox ItemsSource="{Binding NameCollection}"> 
    <ComboBox.ItemsSource> 
     <CompositeCollection> 
     <x:StaticExtension Member="VM:NameClass.NoName " /> 
     <CollectionContainer Collection="{Binding Data.NameCollection, Source={StaticResource proxy}}" /> 
     </CompositeCollection> 
    </ComboBox.ItemsSource> 
</ComboBox> 

Строка Constant, что я не хочу с моей точки зрения коллекции модели, но хотите показывать пользователю:

public class NameClass 
{ 
    public const string NoName = "[None]"; 
} 

ответ

0

Я думаю, что я был более усложняя его, пытаясь включить прокси. Но на самом деле это было довольно простое решение:

ComboBox comboBox1 = new ComboBox { Height = 18, Width = 100, FontSize = 9.5 }; 

CompositeCollection compositeCollection = new CompositeCollection(); 
compositeCollection.Add(NameClass.NoName); 

CollectionContainer collectionContainer = new CollectionContainer(); 
collectionContainer.Collection = ItemsSource1; 

compositeCollection.Add(collectionContainer); 

comboBox1.ItemsSource = compositeCollection;