申し訳ありませんが私の問題は多分愚かexcutingませんが、私はそれを動作することはできません。今、私は、メニューのユーザーコントロールを作成している、とのオープンに関するコマンドは、(私がイベントOpenProjectにそれを切り替えることEventtoCommandを使用)プロジェクトがあります、そしてこのユーザーコントロールはそれでうまく動作しますが、これはあなたが私がOpenProjectHandleという名前RelayCommandにイベントOpenProjectをバインドされている、これはMenuViewModelのコードで参照MainWindow.xamlRelayCommandを結合は
<uc:MenuControl Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3"
DataContext="{Binding Menu}"
ProjectExist="{Binding ProjectExist}"
Path="{Binding SelectedPath}"
HistorySource="{Binding HistorySource}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="NewProject">
<command:EventToCommand Command="{Binding NewProjectHandle}"></command:EventToCommand>
</i:EventTrigger>
<i:EventTrigger EventName="ProjectConfig">
<command:EventToCommand Command="{Binding ProjectConfigHandle}"></command:EventToCommand>
</i:EventTrigger>
<i:EventTrigger EventName="OpenProject">
<command:EventToCommand Command="{Binding OpenProjectHandle}"></command:EventToCommand>
</i:EventTrigger>
<i:EventTrigger EventName="OpenHistory">
<command:EventToCommand Command="{Binding OpenHistoryHandle}"></command:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</uc:MenuControl>
のコードです:
public MenuViewModel()
{
OpenProjectHandle = new RelayCommand(() =>
{
//OpenProject
});
}
私はOpenProjeを定義しましたctHandle、しかし、私がデバッグすると、私はプログラムを見ることができますイベントOpenProject、しかし、OpenProjectHandleは、誰も間違っていることを知って誰も知っている?
============================================== ==============ここ はOpenProjectHandleです:
_projectConfig = ProjectConfigModel.Instance();
HistorySource = new ObservableCollection<HistorySection>();
XmlDocument HisFile = new XmlDocument();
HisFile.Load("D:\\history");
XmlNode Projects = HisFile.SelectSingleNode("Project");
XmlNodeList paths = Projects.ChildNodes;
foreach (XmlNode path in paths) {
HistorySource.Add(new HistorySection(path.InnerText));
}
OpenProjectHandle = new RelayCommand(() =>
{
OpenFileDialog dialog = new OpenFileDialog()
{
Title = "请选择工程文件",
Filter = "工程文件(*.project)|*.project"
};
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
_projectConfig.Path = dialog.FileName;
}
else {
return;
}
XmlDocument ProjFile = new XmlDocument();
ProjFile.Load(_projectConfig.Path);
XmlNode root = ProjFile.SelectSingleNode("Project");
XmlNode database = root.SelectSingleNode("DataBase");
XmlNode resource = root.SelectSingleNode("Resource");
_projectConfig.ProjectName = getValue(root, "Name");
_projectConfig.ProjectPath = getValue(root, "ProjectPath");
_projectConfig.DatabaseIP = getValue(database, "DataBaseIP");
_projectConfig.DatabasePort = getValue(database, "DataBasePort");
_projectConfig.DatabaseName = getValue(database, "DataBaseName");
_projectConfig.DatabaseUserName = getValue(database, "DataBaseUserName");
_projectConfig.DatabasePassword = getValue(database, "DataBasePassword");
_projectConfig.MapSourcePath = getValue(resource, "MapSourcePath");
_projectConfig.MapSourceOutputPath = getValue(resource, "MapSourceOutputPath");
_projectConfig.NpcPicturePath = getValue(resource, "NpcPicturePath");
_projectConfig.MonsterPicturePath = getValue(resource, "MonsterPicturePath");
_projectConfig.MapSoundPath = getValue(resource, "MapSoundPath");
HisFile.Load("D:\\history");
Projects = HisFile.SelectSingleNode("Project");
Paths = InProjects.ChildNodes;
bool existed = false;
foreach (XmlNode path in Paths) {
if (path.InnerText == _projectConfig.Path) {
existed = true;
}
}
if (!existed) {
XmlNode xmle = HisFile.CreateElement("Path");
xmle.InnerText = _projectConfig.Path;
Projects.AppendChild(xmle);
}
HisFile.Save("D:\\history");
ProjectExist = true;
ProjectConfigModel.SetCurrentInstance();
ProjectConfigModel.SetNewInstance();
string getValue(XmlNode father, string str) {
return father.SelectSingleNode(str).InnerText;
}
});
それのすべてがMenuViewModel
(私はMenuViewModelによって定義されたXmlDocumentオブジェクトを使用しました)RelayCommandで定義されていない変数を使用することはできませんか? –
'MenuControl'の他のコマンドはどうですか?それらもRelayCommandsであり、同じ方法で定義されていますか?彼らは働きますか?もしそうなら、問題は私たちが見ることができない 'OpenProjectHandle'の定義の中にあると思います。 – wkl
は 'OpenProjectHandle'が、それ以外の場合は動作しません公共の財産であることを確認してください:'公共のICommand OpenProjectHandle {取得します。プライベートセット;} ' –