Mvvm 似乎无法在视图之间进行通信
我已经编写了一个MVVM原型作为学习练习,我正在努力理解如何在视图之间进行交流 我在左边有一个树状视图(leftSideView) 右侧的列表视图(右侧视图) 主窗口(包括上述两个视图和一个拆分器) 我所实施的方法不起作用,如果你能指出我哪里出了问题,或者有更好的方法,我希望你能告诉我。 您可以从这里下载快速原型 当然,我对bindind做了些错事。 同时,了解你是如何做到这一点也很好。如 左边的列表框(一个视图)右边的列表视图(另一个视图)你如何在两者之间通信Mvvm 似乎无法在视图之间进行通信,mvvm,Mvvm,我已经编写了一个MVVM原型作为学习练习,我正在努力理解如何在视图之间进行交流 我在左边有一个树状视图(leftSideView) 右侧的列表视图(右侧视图) 主窗口(包括上述两个视图和一个拆分器) 我所实施的方法不起作用,如果你能指出我哪里出了问题,或者有更好的方法,我希望你能告诉我。 您可以从这里下载快速原型 当然,我对bindind做了些错事。 同时,了解你是如何做到这一点也很好。如 左边的列表框(一个视图)右边的列表视图(另一个视图)你如何在两者之间通信 谢谢你的建议我看了一下你的代码
谢谢你的建议我看了一下你的代码,做了如下所示的修改,它成功了。我把右边的视图改成了一个文本块来简化它 MainWindow.xaml.cs(为要绑定到的两个视图创建视图模型) LeftSideView.xaml.cs(将此视图的数据上下文设置为视图模型,并在更改时更新视图模型的选定城市) 在RightSideView.xaml中,我只放置如下所示的文本框:
<TextBlock Text="{Binding SelectedCity.Details.City.Name}"/>
选择左视图中的城市后,它将更改视图模型中的选定城市,因此,它将更新右视图中的选定城市名称
以下是ProtoViewModel类的外观:
public class ProtoViewModel : Core.ViewModelBase
{
public ProtoViewModel(IEnumerable<ContinentInfo> continents)
{
Continents =
new ReadOnlyCollection<ContinentViewModel>(
(from continent in continents
select new ContinentViewModel(continent)).ToList());
}
public ViewModels.CityViewModel SelectedCity
{
get { return selectedCity; }
set
{
if(selectedCity != value)
{
selectedCity = value;
OnPropertyChanged("SelectedCity");
}
}
}
private ViewModels.CityViewModel selectedCity;
public ReadOnlyCollection<ContinentViewModel> Continents
{
get { return continents; }
set
{
if (continents != value)
{
continents = value;
OnPropertyChanged("Continents");
}
}
}
private ReadOnlyCollection<ContinentViewModel> continents;
}
公共类ProtoViewModel:Core.ViewModelBase
{
公共ProtoViewModel(IEnumerable大陆)
{
大陆=
新只读集合(
(来自大陆
选择新大陆视图模型(大陆)).ToList();
}
public view models.CityViewModel selected城市
{
获取{return selectedCity;}
设置
{
如果(selectedCity!=值)
{
selectedCity=值;
房地产变更(“选定城市”);
}
}
}
private ViewModels.CityViewModel selected城市;
公共只读收集大洲
{
获取{返回大陆;}
设置
{
如果(大陆!=价值)
{
大陆=价值;
财产变更(“大陆”);
}
}
}
各大洲的私人只读集合;
}
我将与您共享修改后的文件,但我不确定如何做到:)我查看了您的代码,进行了如下所示的修改,并且成功了。我把右边的视图改成了一个文本块来简化它 MainWindow.xaml.cs(为要绑定到的两个视图创建视图模型) LeftSideView.xaml.cs(将此视图的数据上下文设置为视图模型,并在更改时更新视图模型的选定城市) 在RightSideView.xaml中,我只放置如下所示的文本框:
<TextBlock Text="{Binding SelectedCity.Details.City.Name}"/>
选择左视图中的城市后,它将更改视图模型中的选定城市,因此,它将更新右视图中的选定城市名称
以下是ProtoViewModel类的外观:
public class ProtoViewModel : Core.ViewModelBase
{
public ProtoViewModel(IEnumerable<ContinentInfo> continents)
{
Continents =
new ReadOnlyCollection<ContinentViewModel>(
(from continent in continents
select new ContinentViewModel(continent)).ToList());
}
public ViewModels.CityViewModel SelectedCity
{
get { return selectedCity; }
set
{
if(selectedCity != value)
{
selectedCity = value;
OnPropertyChanged("SelectedCity");
}
}
}
private ViewModels.CityViewModel selectedCity;
public ReadOnlyCollection<ContinentViewModel> Continents
{
get { return continents; }
set
{
if (continents != value)
{
continents = value;
OnPropertyChanged("Continents");
}
}
}
private ReadOnlyCollection<ContinentViewModel> continents;
}
公共类ProtoViewModel:Core.ViewModelBase
{
公共ProtoViewModel(IEnumerable大陆)
{
大陆=
新只读集合(
(来自大陆
选择新大陆视图模型(大陆)).ToList();
}
public view models.CityViewModel selected城市
{
获取{return selectedCity;}
设置
{
如果(selectedCity!=值)
{
selectedCity=值;
房地产变更(“选定城市”);
}
}
}
private ViewModels.CityViewModel selected城市;
公共只读收集大洲
{
获取{返回大陆;}
设置
{
如果(大陆!=价值)
{
大陆=价值;
财产变更(“大陆”);
}
}
}
各大洲的私人只读集合;
}
<>我将与你分享修改后的文件,但我不知道如何做:(< p>)你也可以考虑使用松散耦合的中介模式。例如,见: MVVM轻型工具包中的Laurent Bugnon中介 MVVM基金会的信使 Prism事件聚合器
JouthTouter的ISCUKLSESN聚合器
,您也可以考虑使用松散耦合的中介模式。例如,见:
MVVM轻型工具包中的Laurent Bugnon中介 MVVM基金会的信使 Prism事件聚合器Josh Twist的ISuckLessEventAggregator你能用适当的语言来标记它吗?另外,如果可能的话,你可以只发布相关的片段,这样更容易快速查看。谢谢你的回复,我不知道要放多少片段。对不起。我开始把它们放在上面,这篇文章太长了。我会给它贴上标签。我很喜欢MVVM,并且认为它是合适的。你能用合适的语言给它贴上标签吗?另外,如果可能的话,你可以只发布相关的片段,这样更容易快速查看。谢谢你的回复,我不知道要放多少片段。对不起。我开始把它们放进去,帖子就这么长了。我会给它贴上标签。我很喜欢MVVM,觉得很合适。哇。让我消化一下,然后再给你回复。如果你想给我发电子邮件,你可以dotnet@devnet247.com但如果有麻烦也不用担心。我知道剥猫皮的方法很多,但你会这样做吗?只是想确定什么是正确的方法。我一直在读关于“信使”调解人模式等。。。如果你喜欢的话,只是不确定什么是“最佳实践”。哇。让我消化一下,然后再回来。如果你想给我发电子邮件,你可以dotnet@devnet247.com但如果有麻烦也不用担心。我知道有很多方法可以剥猫皮,但我会的
public class ProtoViewModel : Core.ViewModelBase
{
public ProtoViewModel(IEnumerable<ContinentInfo> continents)
{
Continents =
new ReadOnlyCollection<ContinentViewModel>(
(from continent in continents
select new ContinentViewModel(continent)).ToList());
}
public ViewModels.CityViewModel SelectedCity
{
get { return selectedCity; }
set
{
if(selectedCity != value)
{
selectedCity = value;
OnPropertyChanged("SelectedCity");
}
}
}
private ViewModels.CityViewModel selectedCity;
public ReadOnlyCollection<ContinentViewModel> Continents
{
get { return continents; }
set
{
if (continents != value)
{
continents = value;
OnPropertyChanged("Continents");
}
}
}
private ReadOnlyCollection<ContinentViewModel> continents;
}