データベースで使用可能なすべてのテーブルのメニューを表示するために、Fluent リボンを使用してドロップダウン ボタンを作成しようとしています。メニューは、データベースから TablesList に取得された List を使用して生成され、その後、ドロップダウン ボタンの itemssource にバインドされます。
これまでのところ、メニューが生成され、テーブル名が正しく表示されています。
現在のメニューアイテムのヘッダーを取得し、それを使用して正しいテーブルをロードするコマンド LoadTableCommand を使用して、すべてのメニューアイテムを CurrentTable にロードするコマンドにバインドします。
ここで問題が発生し、コマンドが実行されず、エラーや、これが発生している (または発生していない) 理由の手がかりが得られないようです。
今考えられる唯一のことは、ビューモデル自体にコマンドをバインドしてから、それを ItemsSource に割り当てることですが、お気に入りの検索エンジンが解決策を見つけていないため、これを行う方法をまだ見つけていません。自分..
PS: DataManager クラスは正しく動作します。
ここで私がどこで間違っているのか、誰にも分かりますか?
いつものように、どんな助けも大歓迎です;)
MainWindow.xaml
...
<Fluent:DropDownButton Header="Table"
ItemsSource="{Binding TablesList}">
<Fluent:DropDownButton.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding LoadTableCommand}" />
<Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Self}, Path=Header}" />
</Style>
</Fluent:DropDownButton.ItemContainerStyle>
</Fluent:DropDownButton>
...
MainViewModel.cs
...
private DataManager dataManager = new DataManager("Data Source=db.sqlite");
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
TablesList = dataManager.GetTables();
CurrentTable = dataManager.GetTable("PriceList");
}
/// <summary>
/// The <see cref="TablesList" /> property's name.
/// </summary>
public const string TablesListPropertyName = "TablesList";
private List<string> _tablesList = new List<string>();
/// <summary>
/// Sets and gets the TablesList property.
/// Changes to that property's value raise the PropertyChanged event.
/// </summary>
public List<string> TablesList
{
get
{
return _tablesList;
}
set
{
if (_tablesList == value)
{
return;
}
RaisePropertyChanging(TablesListPropertyName);
_tablesList = value;
RaisePropertyChanged(TablesListPropertyName);
}
}
/// <summary>
/// The <see cref="CurrentTable" /> property's name.
/// </summary>
public const string CurrentTablePropertyName = "CurrentTable";
private DataTable _currentTable = new DataTable();
/// <summary>
/// Sets and gets the CurrentTable property.
/// Changes to that property's value raise the PropertyChanged event.
/// </summary>
public DataTable CurrentTable
{
get
{
return _currentTable;
}
set
{
if (_currentTable == value)
{
return;
}
RaisePropertyChanging(CurrentTablePropertyName);
_currentTable = value;
RaisePropertyChanged(CurrentTablePropertyName);
}
}
private RelayCommand<string> _loadTable;
/// <summary>
/// Gets the LoadTableCommand.
/// </summary>
public RelayCommand<string> LoadTableCommand
{
get
{
return _loadTable
?? (_loadTable = new RelayCommand<string>(
table => LoadTable(table)));
}
}
private void LoadTable(string name)
{
Console.WriteLine(name);
// CurrentTable = dataManager.GetTable(name);
}
...