Импорт таблицы перестал работать

Импорт таблицы перестал работать
Atom
14.01.2013
Творог


Код состоит из следующих элементов:


private QuikTrader _trader;
private readonly MyTradesWindow _myTradesWindow = new MyTradesWindow();
_trader.NewMyTrades += trades => this.GuiAsync(() => _myTradesWindow.Trades.AddRange(trades));

string tstr = "А вот и мои сделочки: \n";
foreach (var myTrade in _myTradesWindow.Trades)
{
    var trade = myTrade.Trade;
    tstr = tstr + string.Format("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.\n", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
}
tradestb.Text = tstr;

В итоге в TextBox выводится только инициализированная строка tstr, без сделок. Весь день ушёл на поиск причины, хотя ещё в пятницу табличка выводилась. Код не менял. В то же время стакан, например, выводится как надо. В чём может быть проблема?


Теги:


Спасибо:


< 1 2 3  >
Moadip

Фотография
Дата: 15.01.2013
Ответить


Нет, это готовый контрол. Если нужен кастомный набор, то тогда разбираться с примерами. Посмотрел примеры, думал там готовый контрол используется. Но там как раз кастомный набор колонок делается в ListView.

Спасибо:

VassilSanych

Фотография
Дата: 16.01.2013
Ответить


Moadip: Если надо куда то складывать пришедшие сделки, сделайте отдельную коллекцию типа List +1 Использовать визуальный контрол в качестве промежуточного хранилища информации - это плохой стиль.

Спасибо:

Творог

Фотография
Дата: 16.01.2013
Ответить


А почему моя встроенная в форму табличка (пост #6) компилируется, но не выводится?

Спасибо:

VassilSanych

Фотография
Дата: 16.01.2013
Ответить


Творог: А почему моя встроенная в форму табличка (пост #6) компилируется, но не выводится? Во-первых, для проброса изменений в XAML необходимо реализовывать INotifyPropertyChanged или использовать специальные коллекции и назначать их источником данных в коде, во-вторых, если в Binding есть ошибки, WPF об этом не скажет. Просто не будут подтягиваться данные и всё.

Спасибо:

Творог

Фотография
Дата: 16.01.2013
Ответить


Честно говоря, не очень понимаю как это реализовывать на практике. С примером было бы легче.

Вот я создаю новую коллекцию

private readonly List<MyTrade> _myTradeList = new List<MyTrade>();

Подписываюсь

_trader.NewMyTrades += trades => this.GuiAsync(() => _myTradeList.AddRange(trades));

Пытаюсь вывести

<ListView ItemsSource="{Binding ElementName=_myTradeList, Path=Trades}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="90" Header="Номер" DisplayMemberBinding="{Binding Path=Trade.Id}" />
                    ......

Что не так?

P.S. Рискнул предположить, что это другой тип коллекции

private readonly ObservableCollection<MyTrade> _myTradeList = new ObservableCollection<MyTrade>();

но это ничего не меняет. По крайней мере в моём коде.

Спасибо:

Moadip

Фотография
Дата: 16.01.2013
Ответить


Рискнул предположить, что это другой тип коллекции Правильно рискнули.[smile] Т.к. ObservableCollectionреализует интерфейс INotifyPropertyChanged.

В примерах как раз данная коллекция и используется:


	public partial class MyTradesWindow
	{
		public MyTradesWindow()
		{
			Trades = new ObservableCollection<MyTrade>();
			InitializeComponent();
		}

		public ObservableCollection<MyTrade> Trades { get; private set; }
	}

Пытаюсь вывести

......
> 
> Что не так?

Вы понимаете смысл написанного?
```csharp
ItemsSource="{Binding ElementName=_myTradeList, Path=Trades}"

Чтобы не выносить себе мозг привязкой в Xaml, делайте привязку в коде. Удалите это ItemsSource="", обзовите как нибудь ListView, например MyTrades


<ListView x:Name="MyTrades">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="90" Header="Номер" DisplayMemberBinding="{Binding Path=Trade.Id}" />
                    ......

В коде, в конструкторе главного окна сделайте привязку.


		public MainWindow()
		{
			InitializeComponent();
			MyTrades.ItemsSource = _myTradeList;
		}

И все будет работать. А на досуге почитайте про привязку данных. Там на этом сайте вообще много чего интересного можно найти, чтобы подтянуть свои знания по C#/WPF

Спасибо: Творог

Творог

Фотография
Дата: 16.01.2013
Ответить


Теперь всё ясно. Как раз строка ItemsSource="" в примере меня и запутала.

Спасибо:

Творог

Фотография
Дата: 17.01.2013
Ответить


А как сказать программе нарисовать мне табличку со стаканом?

Делаю так

private ObservableCollection<MarketDepth> _ri = new ObservableCollection<MarketDepth>();
RiQuotes.ItemsSource = _trader.GetMarketDepth("RIH3@RTS"); // тут стринги не принимаются

или как-то так

_trader.MarketDepthsChanged += depths => this.GuiAsync(() => RiQuotes.ItemsSource = _ri.AddRange(depths);

Вывод сюда

        <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>

Или так, но это тоже бред какой-то

_trader.MarketDepthsChanged += depths => this.GuiAsync(() => RiQuotes.ItemsSource = _ri.GetMarketDepth((Security)"RIH3@RTS");

В примерах, например, выще не понятно, где в trader.RegisterMarketDepth(lkoh) берётся именно LKOH@EQBR

Спасибо:

NattyD

Фотография
Дата: 24.01.2013
Ответить



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);
                    }
                };

Спасибо:

Творог

Фотография
Дата: 24.01.2013
Ответить


А вот кстати я так и не смог найти описание функции FirstOrDefault. Интуитивно я догадываюсь что она делает, но всё же хотелось бы увидеть её описание.

Спасибо:
< 1 2 3  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy