Wpf Обязательная фильтрация - PullRequest
1 голос
/ 11 сентября 2009

У меня есть сомнения, связывающие текстовое поле. Сценарий такой: у меня есть набор данных, скажем,

DataTable dt=new DataTable();
dt.TableName = "table";
dt.Columns.Add("mode", typeof(int));
dt.Columns.Add("value", typeof(int));
DataRow dr = dt.NewRow();
dr["mode"] = 1;
dr["value"] = 1000;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["mode"] = 2;
dr["value"] = 2000;
dt.Rows.Add(dr);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
this.DataContext = ds;

Окно привязано к этому набору данных. У меня есть текстовое поле в моем окне, и я хочу привязать его к строке с режимом = 1, чтобы я мог показать это значение строки в свойстве text моего текстового поля.

Как я могу применить эту привязку ..?

Любой ввод будет очень полезным

1 Ответ

1 голос
/ 11 сентября 2009

DataSets немного универсальны для связывания в WPF. Обычно проще использовать шаблон M-V-VM , где у вас есть модели INotifyPropertyChanged или DependencyObjects, с которыми связан ваш пользовательский интерфейс.

Я не уверен, если вы говорите о изменении того, что связано с , в зависимости от "режима" или если вы просто хотите, чтобы фильтровал в "режиме".

В первом случае вам потребуется использовать DataTrigger для стиля, чтобы изменить используемый шаблон ContentTemplate на основе значения поля вашего режима. Это не простая концепция для начинающего или среднего пользователя.

Это приличный пост в блоге с инструкциями о том, как этого добиться. Опять же, это довольно запутанно, а когда не работает, иногда трудно устранить неполадки.

Во втором случае вам будет лучше, если для вашего DataContext будет задан тип, содержащий несколько таблиц DataTable, которые предварительно фильтруются. Фильтрация - это не работа для пользовательского интерфейса, это работа для кода. Это может выглядеть примерно так:

public class MyDataContext
{
  public DataTable ModeOne {get;set;}
  public DataTable ModeTwo {get;set;}
}

или, возможно,

public class MyDataContext
{
  public Dictionary<int, DataTable> TableByMode {get;set;}
}

где бы вы связались вот так

<ItemsControl Content="{Binding TableByMode[1]}">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...