我有2个ComboBox,1个textBox和1个按钮,按钮有多个绑定来传递combox和文本框的值,但是1个组合框中填充了我创建的Objec并且只有一个DataTemplate显示我创建的对象的1个属性。当我在ViewModel中获取值时,对于填充了字符串和texBox的combox工作正常,但是当我检查另一个combox的值时,返回一个字符串,其中包含我创建的对象的名称。
我应该怎么做才能获得对象的属性(Id),而不是名称?
XAML
<ComboBox x:Name="comboBox1" HorizontalAlignment="Left" Margin="183,59,0,0" VerticalAlignment="Top" Width="120" ItemsSource="{Binding _combo}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Situación: "></TextBlock>
<TextBlock Text="{Binding Path=Nombre}" Width="80"></TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="573,66,0,0" VerticalAlignment="Top" Width="75" >
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource ResourceKey=multiDateConverter}">
<Binding ElementName="textBox" Path="Text"></Binding>
<Binding ElementName="comboBox" Path="Text"></Binding>
<Binding ElementName="comboBox1" Path="Text"></Binding>
</MultiBinding>
</Button.CommandParameter>
<Button.Command>
<Binding Path="GetAllActionLogsBetweenDatesCommand"></Binding>
</Button.Command>
</Button>
这是目标代码
namespace PedidosRetraso.Model
{
class PocoCombo
{
public int Id { get; set; }
public string Nombre { get; set; }
}
class Prueba: PocoCombo
{
}
}
ViewModel代码:
class ViewModelMain
{
public ICommand GetAllActionLogsBetweenDatesCommand { get; set; }
public ObservableCollection<PocoCombo> _combo { get; set; }
public ViewModelMain()
{
GetAllActionLogsBetweenDatesCommand = new RelayCommand(GetAllActionLogsBetweenDates_Execute);
_combo = new ObservableCollection<PocoCombo> { new PocoCombo { Id = 20, Nombre = "Enviado" }, new PocoCombo { Id = 25, Nombre = "DIF" }, new PocoCombo { Id = 30, Nombre = "Confirmado" }, new PocoCombo { Id = 40, Nombre = "RP" }, new PocoCombo { Id = 50, Nombre = "Cerrado" }, new PocoCombo { Id = 60, Nombre = "C" } };
}
private void GetAllActionLogsBetweenDates_Execute(object parameter)
{
try
{
var stringList = parameter as string[];
string proveedor = stringList[0];
string empresa = stringList[1];
string situacion = stringList[2];
DateTime fecha = DateTime.Parse(stringList[3]);
// Aqui la consulta SQL
}
catch (Exception ex)
{
}
}
最后是转换器:
public class ICommandMultiDateConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
PocoCombo p = new PocoCombo();
//p = (PocoCombo)values[2];
return new string[] { values[0].ToString(), values[1].ToString(), values[2].ToString(),values[3].ToString() };
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
答案 0 :(得分:0)
这是绑定:
<Binding ElementName="comboBox1" Path="SelectedItem.Id" />
ComboBox中的所选项目是PocoCombo
的实例。你想要那个实例的Id
属性 - 就是这样。
此外,将_combo
重命名为Combo
也是一个好主意。带有下划线的小写名称通常被理解为表示它是私有字段。为避免混淆,公共属性应在“PascalCase”中命名:在这种情况下为Combo
。错误不会破坏您的代码,但修复它将使您的代码更容易让人们理解。