c# -使用CSharp MVVM从组合框返回值



嗨,我不知道我忘记返回组合框的值了。我已经在做第五轮了,还是找不到错误。数据正确地从DB(模型)加载,并显示在组合框(viewModel)中。当我选择一个元素时,我不能直接通过控制台输出它。

XAML:

<Label  Grid.Row="0"  Margin="0"  FontSize="45" Content="{Binding LabelText}" HorizontalAlignment="Center" VerticalAlignment="Top" Grid.Column="1" Padding="5,1,5,5"/>
<ComboBox Grid.Row="0" Margin="83.2,98,82.8,-111.2" ItemsSource="{Binding MeinInhalt, NotifyOnSourceUpdated=True}" SelectedValue="{Binding AusgewaehlterInhalt, NotifyOnSourceUpdated=True}" FontSize="48" Background="LightBlue" MaxDropDownHeight="850" Width="888" Height="95" VerticalAlignment="Top" Grid.Column="1" Padding="5,1">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding CommandDDLChanged}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>

c# ViewModel/TestVM.cs

class TestVM : MainVM
{
private MeinInhalt _ausgewaehlterInhalt;
private RelayCommand<object> _commandDDLChanged;
public ICommand UpdateViewCommand { get; set; }
public string LabelText
{
get {
return _labelText; }
set
{
_labelText = value;
}
}
//zeigt alle MeinInhalte an
public ObservableCollection<string> MeinInhalt { get; }
//zeigt alle MeinInhalte zu beginn, bei auswahl aendert sich aber nichts
public MeinInhalt AusgewaehlterInhalt
{
get { return _ausgewaehlterInhalt; }
set
{
if (_ausgewaehlterInhalt == null)
{
_ausgewaehlterInhalt = value;
Console.WriteLine("Der Ausgewaehlte MeinInhalt a) ist: {0}", _ausgewaehlterInhalt);
}
else
{
_ausgewaehlterInhalt = value;
Console.WriteLine("Der Ausgewaehlte MeinInhalt b) ist: {0}", _ausgewaehlterInhalt);
}
OnPropertyChanged("AusgwaehlterMeinInhalt");
}
}

public object _meinInhaltErfassen { get; private set; }
public TestVM(MainWindowVM mainwinVM, string SELECTION)
{
UpdateViewCommand = new UpdateViewCommand(mainwinVM);
//dataquerry is working and shown in combobox
MeinInhalt = new ObservableCollection<string>(Model.MeinInhalt.AlleMeinInhalte.Select(x => x.MeinInhalt).ToList());
}
public RelayCommand<object> CommandDDLChanged
{
get
{
if (_commandDDLChanged == null)
{
_commandDDLChanged = new RelayCommand<object>(execute => DoCommandDDLChanged());
}
return _commandDDLChanged;
}
}
private void DoCommandDDLChanged()
{
neuelisteMeinInhalte();
Console.WriteLine("Der Ausgewaehlte MeinInhalt c) ist: {0}", _ausgewaehlterInhalt);
}
public void neuelisteMeinInhalte()
{
Console.WriteLine("Der Ausgewaehlte MeinInhalt d) ist: {0}", _ausgewaehlterInhalt);

OnPropertyChanged("FreieFrachtbreife");
}
}

c#模型/MeinInhalt.cs

public class MeinInhalt : tblTest
{
public MeinInhalt(string meinInhalt)
{
MeinInhalt = meinInhalt;
}
public static List<MeinInhalt> AlleMeinInhalte { get;private set; }
public static List<MeinInhalt> VerwendeterMeinInhalt { get; private set; }
public static void initialisiereMeinInhalt()
{
AlleMeinInhalte = new List<MeinInhalt>();
VerwendeterMeinInhalt = new List<MeinInhalt>();
using (var db = new SomeEntities())
{
var query = db.tblTest.Select(x => new { x.MeinInhalt }).Distinct().ToList();
foreach (var item in query)
{
AlleMeinInhalte.Add(new MeinInhalt(item.MeinInhalt));
}
}
}
}

您的数据源是字符串的集合:

<ComboBox ... ItemsSource="{Binding MeinInhalt, NotifyOnSourceUpdated=True}" ... />
public ObservableCollection<string> MeinInhalt { get; }

因此,一旦一个元素被选中,被选中的值就是一个string

然而,你的组合框的SelectedValue属性被绑定到一个类型为MeinInhalt的ViewModel属性。不能将string类型的值赋给MeinInhalt类型的属性。因此,绑定失败。


旁注:当绑定失败时,您将在输出窗口中获得一条(容易忽略的)错误消息。你可能想要考虑在调试构建中激活BindingErrorListener,这样Visual Studio就会主动通知你这些问题。


脚注:

¹调用你的自定义类型一个属性的不同的类型(字符串)MeinInhalt是令人困惑的。不要那样做。如果一个属性和一个类型有相同的名字,我希望它就是那个类型。

相关内容

  • 没有找到相关文章

最新更新