| Moadip 
 
   
 
						
						
					 | Date: 1/15/2013 
 
 
	
			Нет, это готовый контрол. Если нужен кастомный набор, то тогда разбираться с примерами.Посмотрел примеры, думал там готовый контрол используется. Но там как раз кастомный набор колонок делается в ListView.
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| VassilSanych 
 
   
 
						
						
					 | Date: 1/16/2013 
 
 
	
			Moadip Если надо куда то складывать пришедшие сделки, сделайте отдельную коллекцию типа List<MyTrade>  +1 Использовать визуальный контрол в качестве промежуточного хранилища информации - это плохой стиль.
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Творог 
 
   
 
						
						
					 | Date: 1/16/2013 
 
 
	
			А почему моя встроенная в форму табличка (пост #6) компилируется, но не выводится?
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| VassilSanych 
 
   
 
						
						
					 | Date: 1/16/2013 
 
 
	
			Творог А почему моя встроенная в форму табличка (пост #6) компилируется, но не выводится? Во-первых, для проброса изменений в XAML необходимо реализовывать INotifyPropertyChanged или использовать специальные коллекции и назначать их источником данных в коде, во-вторых, если в Binding есть ошибки, WPF об этом не скажет. Просто не будут подтягиваться данные и всё.
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Творог 
 
   
 
						
						
					 | Date: 1/16/2013 
 
 
	
			Честно говоря, не очень понимаю как это реализовывать на практике. С примером было бы легче. Вот я создаю новую коллекцию Code
private readonly List<MyTrade> _myTradeList = new List<MyTrade>(); Подписываюсь Code
_trader.NewMyTrades += trades => this.GuiAsync(() => _myTradeList.AddRange(trades)); Пытаюсь вывести Code
<ListView ItemsSource="{Binding ElementName=_myTradeList, Path=Trades}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="90" Header="Номер" DisplayMemberBinding="{Binding Path=Trade.Id}" />
                    ......
 Что не так? P.S. Рискнул предположить, что это другой тип коллекции Code
private readonly ObservableCollection<MyTrade> _myTradeList = new ObservableCollection<MyTrade>(); но это ничего не меняет. По крайней мере в моём коде.
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Moadip 
 
   
 
						
						
					 | Date: 1/16/2013 
						
							|  |  |  |   |  
 
 
	
			Quote:Рискнул предположить, что это другой тип коллекции Правильно рискнули.[smile]  Т.к. ObservableCollection реализует интерфейс INotifyPropertyChanged . В примерах как раз данная коллекция и используется: Code
	public partial class MyTradesWindow
	{
		public MyTradesWindow()
		{
			Trades = new ObservableCollection<MyTrade>();
			InitializeComponent();
		}
		public ObservableCollection<MyTrade> Trades { get; private set; }
	}
 Quote:Пытаюсь вывести Code
<ListView ItemsSource="{Binding ElementName=_myTradeList, Path=Trades}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="90" Header="Номер" DisplayMemberBinding="{Binding Path=Trade.Id}" />
                    ......
 Что не так? Вы понимаете смысл написанного? Code
ItemsSource="{Binding ElementName=_myTradeList, Path=Trades}" Чтобы не выносить себе мозг привязкой в Xaml, делайте привязку в коде. Удалите это ItemsSource="{Binding ElementName=_myTradeList, Path=Trades}" , обзовите как нибудь ListView , например MyTrades Code
<ListView x:Name="MyTrades">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="90" Header="Номер" DisplayMemberBinding="{Binding Path=Trade.Id}" />
                    ......
 В коде, в конструкторе главного окна сделайте привязку. Code
		public MainWindow()
		{
			InitializeComponent();
			MyTrades.ItemsSource = _myTradeList;
		}
 И все будет работать.  А на досуге почитайте про привязку данных . Там на этом сайте вообще много чего интересного можно найти, чтобы подтянуть свои знания по C#/WPF
			
			
			
			
		
 | 
			
				|  |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Творог 
 
   
 
						
						
					 | Date: 1/16/2013 
 
 
	
			Теперь всё ясно. Как раз строка ItemsSource="{Binding ElementName=_myTradesWindow, Path=Trades}" в примере меня и запутала.
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Творог 
 
   
 
						
						
					 | Date: 1/17/2013 
						
							|  |  |  |   |  
 
 
	
			А как сказать программе нарисовать мне табличку со стаканом? Делаю так Code
private ObservableCollection<MarketDepth> _ri = new ObservableCollection<MarketDepth>();
RiQuotes.ItemsSource = _trader.GetMarketDepth("RIH3@RTS"); // тут стринги не принимаются или как-то так Code
_trader.MarketDepthsChanged += depths => this.GuiAsync(() => RiQuotes.ItemsSource = _ri.AddRange(depths); Вывод сюда Code
        <ListView x:Name="RiQuotes" HorizontalAlignment="Left" Height="567" VerticalAlignment="Top" Width="254" Margin="-4,163,0,0">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="70" Header="Продажа" DisplayMemberBinding="{Binding Path=Ask}" />
                    <GridViewColumn Width="100" Header="Цена" DisplayMemberBinding="{Binding Path=Price}" />
                    <GridViewColumn Width="70" Header="Покупка" DisplayMemberBinding="{Binding Path=Bid}" />
                </GridView>
            </ListView.View>
        </ListView> Или так, но это тоже бред какой-то Code
_trader.MarketDepthsChanged += depths => this.GuiAsync(() => RiQuotes.ItemsSource = _ri.GetMarketDepth((Security)"RIH3@RTS"); В примерах, например, выще не понятно, где в trader.RegisterMarketDepth(lkoh) берётся именно LKOH@EQBR
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| NattyD 
 
   
 
						
						
					 | Date: 1/24/2013 
 
 
	
			Code
private const string _ri_code = "RIH3";
.......................................
 _trader.NewSecurities += securities => 
                {
                    var ri = securities.FirstOrDefault(sec => sec.Code == _ri_code);
                    if (ri != null)
                    {
                        _ri = ri;
                        _trader.RegisterMarketDepth(_ri);
                        _trader.RegisterTrades(_ri);
                    }
                };
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| Творог 
 
   
 
						
						
					 | Date: 1/24/2013 
 
 
	
			А вот кстати я так и не смог найти описание функции FirstOrDefault. Интуитивно я догадываюсь что она делает, но всё же хотелось бы увидеть её описание.
			
			
			
			
		
 | 
			
				|  | 
	
		| Thanks: |   |  | 
			
				|  |